Árvore de páginas

CONTEÚDO

  1. Visão geral
  2. Configuração
  3. Exemplo de utilização
  4. Assuntos relacionados

01. VISÃO GERAL


A biblioteca OpenEdge.Net.pl é projetada para ser utilizada como uma API para fazer solicitações HTTP e HTTPS.

Tendo como recursos:

  • Suporte da maioria dos métodos HTTP, como GET, PUT, POST e DELETE
  • Disponibilidade de um cliente com estado para gerenciar cookies
  • Suporte para servidores proxy que podem ser usados por solicitação ou por cliente
  • Redirecionamento automático de solicitações com base nos códigos de status retornados
  • Mecanismo de autenticação extensível, incluindo suporte para autenticação HTTP Basic e Digest

* Está biblioteca é desenvolvida e suportada diretamente pela Progress. Documentação: 

https://docs.progress.com/pt-BR/bundle/openedge-programming-interfaces-117/page/Making-HTTPS-requests-from-ABL-applications.html

02. Configuração


Configuração

Para iniciar sua utilização é necessário incluir a biblioteca de procedimentos OpenEdge.Net.pl no PROPATH da seguinte maneira:

SistemaCaminho da biblioteca
UNIX TTY$DLC/tty/netlib/OpenEdge.Net.pl
Windows GUI%DLC%\gui\netlib\OpenEdge.Net.pl
Windows TTY%DLC%\tty\netlib\OpenEdge.Net.pl

Exemplo

C:\dlc117\gui\netlib\OpenEdge.Net.pl

03. EXEMPLO DE UTILIZAÇÃO


Recursos

OpenEdge.Net.HTPP.IHttpRequest https://docs.progress.com/pt-BR/bundle/openedge-programming-interfaces-117/page/OpenEdge.Net.HTTP.IHttpRequest.html

Toda solicitação possui dois elementos obrigatórios: Um verbo HTTP e URI.

Para construir um objeto IHttpRequest se utiliza a classe OpenEdge.Net.Http.RequestBuilder tendo como métodos:

  • RequestBuilder:Get ( uri [, entity ])
  • RequestBuilder:Put ( uri, entity )
  • RequestBuilder:Post ( uri, entity )
  • RequestBuilder:Delete ( uri [, entity ])
  • RequestBuilder:Head ( uri )
  • RequestBuilder:Options ( uri [, entity ])
  • RequestBuilder:Trace ( uri )

Onde uri é a instância de objeto URI ou cadeia de caracteres e entity é a instância de objeto.

Exemplo GET
USING OpenEdge.Net.HTTP.RequestBuilder.
USING OpenEdge.Net.HTTP.IHttpRequest.

DEFINE VARIABLE httpUrl AS CHARACTER NO-UNDO.
DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO.

httpUrl = "http://www.progress.com".
oRequest = RequestBuilder:Get(httpUrl):Request.
Exemplo PUT
USING OpenEdge.Net.HTTP.RequestBuilder.
USING OpenEdge.Net.HTTP.IHttpRequest.
USING Progress.Json.ObjectModel.JsonObject.

DEFINE VARIABLE httpUrl AS CHARACTER NO-UNDO.
DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO.
DEFINE VARIABLE oJson AS JsonObject NO-UNDO.

httpUrl = "http://oemobiledemo.progress.com/VehicleOrderService/rest/VehicleOrder/Cart". 
oJson = new JsonObject().
oJson:Add('dsShoppingCart', new JsonObject()). 

oRequest = RequestBuilder:Put(httpUrl, oJson) 
                :AcceptJson() 
                :Request.

OpenEdge.Net.HTPP.HttpClient https://docs.progress.com/pt-BR/bundle/openedge-programming-interfaces-117/page/OpenEdge.Net.HTTP.HttpClient.html

HttpClient faz a solicitação executando o método Execute(), que recebe IHttpRequest e retorna IHttpResponse.

Recomendação Progress

Recomenda-se que o client HTTP seja construído usando a classe OpenEdge.Net.HTTP.ClientBuilder

Exemplo de Request
USING OpenEdge.Net.HTTP.IHttpRequest.
USING OpenEdge.Net.HTTP.IHttpResponse.
USING OpenEdge.Net.HTTP.ClientBuilder.

DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO.
DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
 
oResponse = ClientBuilder:Build():Client:Execute(oRequest).
MESSAGE
    oResponse:StatusCode SKIP   
    oResponse:StatusReason SKIP
VIEW-AS ALERT-BOX.

OpenEdge.Net.HTTP.IHttpResponse https://docs.progress.com/pt-BR/bundle/openedge-programming-interfaces-117/page/OpenEdge.Net.HTTP.IHttpResponse.html

Quando a request tem um retorno de sucesso, um objeto IHttpResponse é retornado tendo duas propriedades importantes, Entity StatusCode.

A propriedade Entity possui um tipo definido de Progress.Lang.Object.

A propriedade StatusCode retorna o resultado da request.

Exemplo Status Code
USING OpenEdge.Net.HTTP.IHttpRequest.
USING OpenEdge.Net.HTTP.IHttpResponse.
USING OpenEdge.Net.HTTP.ClientBuilder. 

DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO.
DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
 
oResponse = ClientBuilder:Build():Client:Execute(oRequest).
MESSAGE
    oResponse:StatusCode SKIP
    oResponse:StatusReason SKIP
VIEW-AS ALERT-BOX.

OpenEdge.Net.URI https://docs.progress.com/pt-BR/bundle/openedge-programming-interfaces-117/page/OpenEdge.Net.URI.html

A classe URI encapsula o endereço de destino, incluindo o esquema, host, porta, caminho, consulta e outros elementos URI relacionados.

Exemplo de como construir um objeto URI
USING OpenEdge.Net.URI.
USING OpenEdge.Net.UriSchemeEnum. 

DEFINE VARIABLE oURI AS URI NO-UNDO. 

oURI = new URI(string(UriSchemeEnum:http), 'oemobiledemo.progress.com').
oURI:Path = '/VehicleOrderService/rest/VehicleOrder/Cart'. 
oURI:AddQuery('filter', '').

Uso de Cookies https://docs.progress.com/pt-BR/bundle/openedge-programming-interfaces-117/page/Implementing-stateful-clients-with-cookies.html

Os cookies são armazenados na instância de classe OpenEdge.Net.HTTP.ICookieJar.

Regras de armazenamento de cookies

    • Devem estar associados a um domínio
    • Domínio do cookie e o domínio do host de solicitação devem ser iguais
    • Cookies que não têm data de validade são considerados cookies de sessão e são excluídos quando o CookieJar é excluído/limpo. Cookies de sessão podem ser limpos com o método CleanSessionCookies() .
Exemplo de implementação de cookies
USING OpenEdge.Net.HTTP.IHttpClient.
USING OpenEdge.Net.HTTP.ClientBuilder.
USING OpenEdge.Net.HTTP.ICookieJar. 
USING OpenEdge.Net.HTTP.CookieJarBuilder.
USING OpenEdge.Net.HTTP.Cookie. 

DEFINE VARIABLE moHttpClient AS IHttpClient NO-UNDO. 

moHttpClient = ClientBuilder:Build()
                    :KeepCookies(CookieJarBuilder:Build():CookieJar)
                    :Client.

Considerações de Segurança https://docs.progress.com/pt-BR/bundle/openedge-programming-interfaces-117/page/Security-considerations.html

O client HTPP pode realizar requisições HTTPS desde que os certificados do lado do client estejam instalados no armazenamento de certificados OpenEdge.

As credenciais não são armazenadas na biblioteca do client HTTP, as mesmas podem ser adicionadas em uma request ou URI utilizando o objeto OpenEdge.Net.HTTP.Credentials.

Exemplo de como realizar requisição com HTTPs

Exemplo de Requisição HTTPs
USING OpenEdge.Net.HTTP.IHttpRequest.
USING OpenEdge.Net.HTTP.IHttpResponse.
USING OpenEdge.Net.HTTP.ClientBuilder.
USING OpenEdge.Net.HTTP.IHttpClientLibrary.
USING OpenEdge.Net.HTTP.lib.ClientLibraryBuilder.
USING OpenEdge.Net.HTTP.RequestBuilder.

DEFINE VARIABLE oLib           AS OpenEdge.Net.HTTP.IHttpClientLibrary NO-UNDO.
DEFINE VARIABLE oHttpClient    AS OpenEdge.Net.HTTP.IHttpClient        NO-UNDO.
DEFINE VARIABLE oRequest       AS IHttpRequest                         NO-UNDO.
DEFINE VARIABLE oResponse      AS IHttpResponse                        NO-UNDO.

ASSIGN oLib        = ClientLibraryBuilder:Build():sslVerifyHost(NO):library
       oHttpClient = ClientBuilder:Build():UsingLibrary(oLib):Client.

ASSIGN oRequest = RequestBuilder:GET("https://www.google.com.br"):Request.

oResponse  = oHttpClient:Execute(oRequest).

MESSAGE oResponse:StatusCode   SKIP  
        oResponse:StatusReason SKIP
        oResponse:ContentType  SKIP
        oResponse:Entity:ToString() VIEW-AS ALERT-BOX. 


Para execução do fonte, e necessário seguir o passo de certificados abaixo.


Como baixar os certificados de URL para utilização com HTTPs:

Para localizar os certificados da URL, pressione para Visualizar as Informações do site.



No pop-up que será exibido, localize a parte de Certificado e clique em "Válido".




Localize a aba "Caminho de Certificação". Nessa tela são exibidos todos os certificados da URL.




Para baixar o certificado, selecione o desejável, vá para aba de "Detalhes" e clique em Copiar para Arquivo...



Clique em "Avançar"



Marque a opção "X.509 binário codificado por DER (*.cer)" e clique em "Avançar"



Selecione o diretorio que deseja baixar o certificado e clique em "Avançar"



Clique em concluir. 



Para cada certificado baixado executar o seguinte comando no proenv: certutil -format DER -import diretorio\nome_certificado.cer (Exemplo: certutil -format DER -import C:\Temp\nome_do_certificao.cer).

Atenção

Os certificados devem ser baixados do ultimo para o primeiro. E importados no proenv da mesma maneira, do ultimo para o primeiro.

04. ASSUNTOS RELACIONADOS



Depreciação da api ut-http-api

A api ut-http-api esta em processo de depreciação, é recomendável substituir seu uso pelo recurso OpenEdge.Net.HTTP