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 determinado documento 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
Nome | Tipo | Descrição | Obrigatório | Referência |
cUrl | Caracter | Indica o endereço HTTP com a pasta e o documento solicitado. | X | |
cGETParms | Caracter | Indica 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 (""). | ||
cPOSTParms | Caracter | Indica uma string de parâmetros, do tipo POST, que serão enviados ao servidor HTTP através do pacote HTTP. Caso não sejaespecificado, este parâmetro será considerado vazio (""). | ||
nTimeOut | Numérico | Indica 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. | ||
aHeadStr | Vetor | Indica o array que contêm as strings que serão acrescentadas no header da requisição HTTP que será realizada. | ||
cHeaderRet | Caracter | Indica a string que conterá o header de resposta HTTP enviado pelo servidor requisitado. Observação: A variável deve serdeclarada 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¶m2=value2"
Neste caso, ao realizar o POST para o endereço, este seria completado com os parâmetros Get.
Exemplo http://www.totvs.com?param1=value1¶m2=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 '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.
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(aHeadOut,'User-Agent: Mozilla/4.0 (compatible; Protheus '+GetBuild()+')')sPostRet := HttpPost(cUrl,"","",nTimeOut,aHeadOut,@cHeadRet)if empty(sPostRet) conout("Ok HttpPost") conout("WebPage", sPostRet)else conout("Fail HttpPost. Verifique conf. de Proxy") varinfo("Header", cHeadRet)endifreturn