1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Conectar Webservice Rest - Baisc Auth

Discussão em 'Progress 4GL' iniciado por Marcos Frasson, Março 2, 2022.

  1. Marcos Frasson

    Marcos Frasson Membro Participativo

    Boa tarde Pessoal.


    Estou precisando conectar em um Webservice Rest https e esse exige que seja passado um usuário e senha para autenticação. Estou tentando da forma abaixo;

    Using OpenEdge.Net.HTTP.IHttpRequest.
    Using OpenEdge.Net.HTTP.IHttpResponse.
    Using OpenEdge.Net.HTTP.ClientBuilder.
    Using OpenEdge.Net.HTTP.RequestBuilder.
    Using OpenEdge.Core.WidgetHandle.
    Using OpenEdge.Core.String.
    Using Progress.Json.ObjectModel.*.
    USING Progress.Lang.*.
    USING OpenEdge.Net.HTTP.Credentials.

    /********* Integracao Paytrack **************/
    DEFINE VARIABLE oEntity AS Object NO-UNDO.
    DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO.
    DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.

    DEFINE VARIABLE oCredentials AS Credentials NO-UNDO.
    DEFINE VARIABLE httpUrl AS CHARACTER NO-UNDO.

    httpUrl = "https://enderecoWebservice".
    oCredentials = new Credentials('application', 'user', 'password').

    oRequest = RequestBuilder:Get(httpUrl):UsingBasicAuthentication(oCredentials):Request.
    oResponse = ClientBuilder:Build():Client:Execute(oRequest).
    oEntity = oResponse:Entity.
    MESSAGE oResponse:StatusCode SKIP
    oResponse:StatusReason SKIP
    VIEW-AS ALERT-BOX.

    Mas está me retornando erro conforme anexo.

    Como é um webservice https, pelo que pesquise precisa ser importado o certificado no Progress, já solicitei para equipe de CLOUD fazer o procedimento e mesmo assim o erro ainda continua.

    Arquivos Anexados:

    rohis curtiu isso.
  2. Bruno Ferreira

    Bruno Ferreira Sem Pontuação

    Boa noite.
    Tivemos um problema parecido aqui na empresa e resolvemos dessa forma.

    Using OpenEdge.Net.HTTP.IHttpRequest.
    Using OpenEdge.Net.HTTP.IHttpResponse.
    Using OpenEdge.Net.HTTP.ClientBuilder.
    Using OpenEdge.Net.HTTP.RequestBuilder.
    USING OpenEdge.Net.HTTP.Lib.ClientLibraryBuilder.
    Using OpenEdge.Core.WidgetHandle.
    Using OpenEdge.Core.String.
    Using Progress.Json.ObjectModel.*.
    USING Progress.Lang.*.
    USING OpenEdge.Net.HTTP.Credentials.

    /********* Integracao Paytrack **************/
    DEFINE VARIABLE oEntity AS Object NO-UNDO.
    DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO.
    DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.

    DEFINE VARIABLE oCredentials AS Credentials NO-UNDO.
    DEFINE VARIABLE httpUrl AS CHARACTER NO-UNDO.

    httpUrl = "https://enderecoWebservice".
    oCredentials = new Credentials('application', 'user', 'password').

    oRequest = RequestBuilder:Get(httpUrl):UsingBasicAuthentication(oCredentials):Request.
    oResponse = ClientBuilder:Build()
    :UsingLibrary(ClientLibraryBuilder:Build()
    :AddSslProtocol('TLSv1.2')
    :Library)

    :Client
    :Execute(oRequest).
    oEntity = oResponse:Entity.
    MESSAGE oResponse:StatusCode SKIP
    oResponse:StatusReason SKIP
    VIEW-AS ALERT-BOX.


    Teste e nos avise por gentileza.
  3. Marcos Frasson

    Marcos Frasson Membro Participativo

    Bom Dia,

    Mesmo seguindo a sua dica continuo com ERRO, uma dúvida no primeiro parâmetro do objeto oCredentials eu estou passando como 'application' da mesma forma que está no meu exemplo, é isso mesmo eu devo informar outro valor?
  4. Bruno Ferreira

    Bruno Ferreira Sem Pontuação

    Nem me atentei para essa parte do código.
    Eu costumo passar basic authorization via header.
    Não sei ao certo se é a melhor forma, mas para mim funciona.

    oRequest = RequestBuilder:Get(httpUrl)
    :AddHeader('Authorization', 'Basic dGVzdGU6c2VuaGE=' )
    :Request.

    Lembrando que o login e senha são um base64.
    No exemplo acima o login é teste e a senha é senha.

    "teste senha" === base64 ===> "dGVzdGU6c2VuaGE="
  5. Marcos Frasson

    Marcos Frasson Membro Participativo

    Pessoal resolvido a questão do erro de SSL. Segue abaixo como ficou o código.

    Using OpenEdge.Net.HTTP.IHttpRequest.
    Using OpenEdge.Net.HTTP.IHttpResponse.
    Using OpenEdge.Net.HTTP.ClientBuilder.
    Using OpenEdge.Net.HTTP.RequestBuilder.
    USING OpenEdge.Net.HTTP.Lib.ClientLibraryBuilder.
    Using OpenEdge.Core.WidgetHandle.
    Using OpenEdge.Core.String.
    Using Progress.Json.ObjectModel.*.
    USING Progress.Lang.*.
    USING OpenEdge.Net.HTTP.Credentials.

    DEFINE VARIABLE oEntity AS Object NO-UNDO.
    DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO.
    DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
    DEFINE VARIABLE oCampos AS JsonArray NO-UNDO.
    DEFINE VARIABLE objJSON AS JsonObject NO-UNDO.
    DEFINE VARIABLE httpUrl AS CHARACTER NO-UNDO.
    DEFINE VARIABLE oCredentials AS Credentials NO-UNDO.

    oCredentials = new Credentials('application', 'user', 'password').
    DEFINE VARIABLE cCiphers AS CHARACTER NO-UNDO
    EXTENT 2 INITIAL ["ECDHE-RSA-AES256-GCM-SHA384"].

    httpUrl = "https://exemplo.com.br".
    oRequest = RequestBuilder:Get(httpUrl):UsingBasicAuthentication(oCredentials)
    :Request.
    oResponse = ClientBuilder:Build()
    :UsingLibrary(ClientLibraryBuilder:Build()
    :AddSSLProtocol('TLSv1.2')
    :SetSslCiphers(cCiphers)
    :ServerNameIndicator('exemplo.com.br')
    :Library)
    :Client
    :Execute(oRequest).
    oEntity = oResponse:Entity.

    MESSAGE "oResponse:StatusCode: " oResponse:StatusCode VIEW-AS ALERT-BOX INFO BUTTONS OK.
  6. fabianofss

    fabianofss Membro Participativo

    Olá @Marcos Frasson
    sempre que tento fazer um request em HTTPS tenho esse erro:
    upload_2022-4-12_16-42-39.png

    Sabe como resolver?
    rohis curtiu isso.

Compartilhe esta Página