segunda-feira, junho 05, 2006

PowerBuilder - Utilizando HTTP Post

Recentemente tive a necessidade de utilizar o HTTP Post, chamando uma URL passando um XML e recebendo um XML de resposta.
 
No final das contas, o processo é simples, mas não achei nada "pronto" na Web de como utiliza-lo.
 
Abaixo vão os passos necessários para criação de um objeto que chama o método HTTP Post:
 
1 - Objeto com resultado Web
    - Crie um User Object do tipo Standart/InternetResult
    - Declare uma variável de instancia onde será armazenada o retorno (No nosso exemplo, criamos a variável VISRetornoWeb )
    - Na função InternetData(), atribua o parâmetro da função para a variável criada no passo acima
        VISRetornoWeb = string(data)
 
        return 1
 
2 - Criando objeto para disparar metodo HTTP Post
    - Cria um objeto do tipo Custom
    - Crie uma instancia do objeto criado na etapa 1 (No nosso caso, a instancia chama UOI_internet_resultado)
    - Crie uma função para chamar o método HTTP Post com os seguintes argumentos
        * Value String p_URL
        * Value String p_ParametroWeb (Parâmetros que serão passados para Web)
        * Reference String p_RetornoWeb (Parâmetros que serão retornados da Web)
    - Coloque o seguinte código na função
Blob Vlblb_args
String Vls_headers
Long Vll_ret
 
p_retornoWeb = ''
 
Vlblb_args = blob(p_parametroWeb)
 
vll_ret = UOI_Inet.PostURL(p_url, Vlblb_args, vls_headers,  UOI_internet_resultado)
 
if vll_ret = 1 then
 VISMSG = ""
elseif vll_ret = -1 then
 VISMSG = "Erro ao chamar o objeto de acesso a internet."
 Return -1
elseif vll_ret = -2 then
 VISMSG = "A URL informada é inválida."
 Return -1
elseif vll_ret = -4 then
 VISMSG = "Não foi possível conectar a Internet."
 Return -1
elseif vll_ret = -5 then
 VISMSG = "Não foi possível conectar a Internet utilizando protocolo seguro (HTTPS)."
 Return -1
elseif vll_ret = -5 then
 VISMSG = "Ocorreu um erro na requisão a Internet."
 Return -1
else
 VISMSG = "Ocorreu um erro não documentado no acesso a Internet. - Codigo :" + string(vll_ret)
 return -1
end if
 
p_retornoWeb = uoi_internet_resultado.visretornoweb
 
return 1

2 comentários:

Anônimo disse...

oi Thiago, td bem?

bom, deixa ver se tu consegue me ajudar...

tenho que chamar um webservice pelo PB para retornar muitas informações, como estou desenvolvendo em PB8 e este ainda não tem nativo chamada para webservices, resolvi fazer essa chamada pelo oracle, então criei uma procedure, mas agora me deparei com um problema, estou recebendo muita informação e o tipo de campo que estou utilizando não é suficiente, estou trabalhando com o long, tentei usar o clob, mas não sei se não soube usar corretamente, até acho que deve ser isso, mas igual não está funcionando, até pq não consegui fazer o pb entender o tipo clob, pois gravo uma tabela e leio a mesma no pb....bom tu já precisou fazer algo similar a isso?, tens alguma idéia para me dar?

se tiver alguma dica, meu e-mail é dadi_rs@yahoo.com.br

grata,
Dadi - POA

Anônimo disse...

Olá Thiago!

Tenho que fazer um download de um arquivo da internet, só que pelo PB, então, a questão é como irei conseguir efetuar a autenticação na página(responder ao header enviado pela página), efetuar o login(pois é necessário efetuar o login), e setar os parametros para fazer o download do arquivo. Não deve abrir a pagina do browser, o usuário irá clicar no botão e em seguida irá aparecer uma janela para o mesmo informar o usuário e senha(para acessar a página da web), e depois da autenticação efetuada, irá aparecer outra janela para ele informar os parametros para baixar o arquivo desejado.
Os link's que deverão ser executado eu já tenho. só preciso saber como fazer!
OBS: Uso o PB 9
Email: lucimar.frassetto@gmail.com

Desde já agradeço!

Atenciosamente,
Lucimar Frasseto Canto.