Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Deixar claro no exemplo a necessidade de especificar explicitamente o content-type quando informado o parâmetro aHeadStr

...

Portuguese

Pagetitle
HTTPPost
HTTPPost

Função: HTTPPost

Permite emular um client HTTP - Hypertext Transfer Protocol, através de uma função AdvPL, postando um bloco de informações para 
um
uma 
determinado
determinada 
documento
URL 
publicado
em um servidor Web, utilizando o método POST, permitindo a passagem de parâmetros adicionais via URL e aguardando por um tempo determinado (time-out) pela resposta do servidor solicitado.

HTTPPost ( < cUrl>, [ cGETParms], [ cPOSTParms], [ nTimeOut], [ aHeadStr], [ @cHeaderRet] ) --> cReturn

 

NomeTipoDescriçãoObrigatórioReferência
cUrlCaracterIndica o endereço HTTP com a pasta e o documento solicitado.X 
cGETParmsCaracterIndica uma string de parâmetros, do tipo GET, que serão enviados ao servidor HTTP através da URI. Caso não seja especificado,este parâmetro será considerado vazio ("").  
cPOSTParmsCaracterIndica uma string de parâmetros, do tipo POST, que serão enviados ao servidor HTTP através do pacote HTTP. Caso não sejaespecificadoseja especificado, este parâmetro será considerado vazio ("").  
nTimeOutNuméricoIndica o tempo, em segundos, máximo de inatividade permitido durante a recepção do documento. Caso não seja especificado,o valor assumido será de 120 segundos.  
aHeadStrVetorIndica o array que contêm as strings que serão acrescentadas no header da requisição HTTP que será realizada. Vide observações de comportamento da função.  
cHeaderRetCaracterIndica a string que conterá o header de resposta HTTP enviado pelo servidor requisitado. Observação: A variável deve serdeclarada ser declarada como uma string vazia "" antes da chamada da função. X

 

cReturn
    (caracter)
  • Retorna a string que corresponde a requisição solicitada.

O parâmetro <cGETParms> representa uma lista de itens, separados por '&'. Pois, a mesma segue o formato URI - Uniform Resource Identiers: Query Componet.

Exemplo: "param1=value1&param2=value2"


Neste caso, ao realizar o POSTpara o endereço, este seria completado com os parâmetros Get.

Exemplo http://www.totvs.com?param1=value1&param2=value2

Caso não seja retornado o documento antes do término do time-out, especificado na chamada da função, ou não seja possível localizar o servidor; seja por falha de resolução de DNS ou por erro de sintaxe ao especificar a URL, a função retornará nulo (NIL).

Caso não seja possível acessar o documento como, por exemplo, o documento não existe, o retorno será uma string HTML com a mensagem de erro HTML enviada pelo servidor correspondente.

Ao utilizar a função HTTPPost(), pode-se especificar um Content-Type diferenciado para o conteúdo postado. Caso não seja especificado um Content-Type, alguns servidores tratam a informação postada como sendo um dado do tipo 'Os headers da requisição HTTP a ser enviada serão montados automaticamente, contendo o Host, Accept, e Content-Length. Caso o parâmetro aHeadStr não seja especificado, o cabeçalho http da requisição enviada será montado internamente especificando que o conteúdo postado deve ser tratado como "application/x-www-form-url', ou seja, seria o equivalente a um formulário HTML postado via browser. Desta forma, outros servidores poderão não reconhecer tal informação postada dessa forma.urlencoded", identificando ao destinatário da requisição que o conteúdo do pacote HTTP deve ser tratado com oum post de um formulário html. Caso o parâmetro aHeadStr seja especificado, devemos acrescentar nele qual é o Content-type da requisição, pois sem esta informação, alguns servidores de HTTP, inclusive o próprio Application Server Protheus configurado como HTTP Server, não reconhecerá o conteúdo postado.

 

Para especificar que o conteúdo postado deve ser tratado como um POST de formulário HTTP, deve-se passar no parâmetro <aHeadStr> um elemento 'Content-Type: application/x-www-form-url'.

#INCLUDE "TOTVS.CH"
#INCLUDE "XMLCSVCS.CH"
user function tstpost()
Local cUrl := "http://www.google.com"
Local nTimeOut := 120

Local aHeadOut := {}
Local cHeadRet := ""
Local sPostRet := ""
// Acrescenta o UserAgent na requisição ...// http://tools.ietf.org/html/rfc3261#page-179aadd
 
aadd(aHeadOut,'User-Agent: Mozilla/4.0 (compatible; Protheus '+GetBuild()+')')
aadd(aHeadOut,'Content-Type: application/x-www-form-urlencoded')
sPostRet := HttpPost(cUrl,"","",nTimeOut,aHeadOut,@cHeadRet)
if !empty(sPostRet)
conout("HttpPost Ok
HttpPost
") 
conout
varinfo("WebPage", sPostRet)
else
conout("
Fail
HttpPost
.
 
Verifique conf. de Proxy
Failed.") 
varinfo("Header", cHeadRet)
endifreturn

Endif
Return

Abrangência

Advanced Protheus 6.09 , Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server 10 , ByYou Application Server