Histórico da Página
Composition Setup |
---|
import.css=/download/attachments/327912/newLayout.css |
...
Pagetitle |
---|
...
|
Permite emular um client HTTP - Hypertext Transfer Protocol, através de uma função AdvPL, postando um bloco de informações para uma determinada URL em um servidor Web, utilizando o método POST, permitindo a passagem de parâmetros adicionais via URL e aguardando por um tempo determinado
Função: HTTPPost
...
(time-out)
...
pela
...
resposta
...
do
...
servidor
...
solicitado.
Sintaxe
...
HTTPPost ( < cUrl>, [ cGETParms], [ cPOSTParms], [ nTimeOut], [ aHeadStr], [ @cHeaderRet] ) --> cReturn
Bloco de código | ||
---|---|---|
| ||
HttpPost( < cUrl >, [ cGetParms ], [ cPostParms ], [ nTimeOut ], [ aHeadStr ], [ @cHeaderGet ] )
|
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Referência |
---|---|---|---|---|
cUrl |
...
caractere | Indica o endereço HTTP com a pasta e o documento solicitado. | X |
...
cGetParms |
...
caractere | 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 |
...
caractere |
...
Indica uma string de parâmetros, do tipo POST, que serão enviados ao servidor HTTP através |
...
da URL. Caso não seja especificado, 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 |
...
. |
...
cHeaderGet |
...
caractere |
...
Indica a string que conterá o header de resposta HTTP enviado pelo servidor requisitado. Observação: A variável deve ser declarada |
...
antes da chamada da função. | X |
...
Retorno
...
Nome |
---|
...
Tipo |
---|
...
Descrição |
---|
...
cRet |
...
caractere | Retorna a string que corresponde a requisição solicitada. |
Informações | |||||||
---|---|---|---|---|---|---|---|
| |||||||
|
Exemplos
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#INCLUDE "TOTVS.CH" #INCLUDE "XMLCSVCS.CH" user function tstpost() Local cUrl := "http://www.google.com" Local nTimeOut := 120 Local aHeadOut := {} Local cHeadRet := "" Local sPostRet := "" aadd( AAdd( aHeadOut, 'User-Agent: Mozilla/4.0 (compatible; Protheus ' + GetBuild() + ')') aadd( ) AAdd( aHeadOut, 'Content-Type: application/x-www-form-urlencoded') ) sPostRet := HttpPost( cUrl, "REQUEST=1212", "EXAMPLEFIELD=DUMMY", nTimeOut, aHeadOut, @cHeadRet) if ) varinfo( "Header", cHeadRet ) if !empty( sPostRet ) conout( "HttpPostOk OK" ) varinfo( "WebPage", sPostRet ) else conout("HttpPost Failed.") varinfo("Header", cHeadRet) Endif Return Advanced Protheus 6.09 , Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server 10 , ByYou Application Server endif
return
|
Nota | ||||
---|---|---|---|---|
| ||||
Para utilização do 'Content-Type: multipart/form-data' atente-se a formatação dos Parametros do Post (uma linha em branco deve ser inserida sempre antes do conteúdo de cada elemento). É possível informar o boundary que será utilizado na transmissão utilizando a seguinte sintaxe: "Content-Type: multipart/form-data; boundary=MyBoundary" Quando o filename é informado, o conteúdo do arquivo será carregado pelo Application Server e será enviado. Para correta interpretação da mensagem pelo server que receberá o conteúdo do POST é ideal que o Content-type seja especificado. Para lista dos content-types possíveis consulte: http://tdn.totvs.com/display/tec/Valores+de+Content-Types Apenas paths relativos são suportados por questão de segurança. Arquivos devem estar abaixo do diretório RootPath. Se na requisição existir o boundary a mesma não será formata pelo Application Server e será apenas repassada Essa funcionalidade está disponível apenas em versões iguais ou superiores a: 13.1.3.44,13.2.3.44 e 17.3.0.13. |
Nota | ||
---|---|---|
| ||
Caso seja necessário fazer o upload de arquivos usando POST, faça o encode do conteúdo para UTF-8 usando a função EncodeUTF8 e verifique o uso do Content-Type como application (ex: application/xml em vez de text/xml). |
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#INCLUDE "TOTVS.CH"
#INCLUDE "XMLCSVCS.CH"
user function tstpostMFormData()
Local cUrl := "http://ptsv2.com/t/totvstests/post"
Local nTimeOut := 120
Local aHeadOut := {}
Local cHeadRet := ""
Local sPostRet := ""
AAdd( aHeadOut, 'User-Agent: Mozilla/4.0 (compatible; Protheus ' + GetBuild() + ')')
// AAdd( aHeadOut, 'Content-Type: multipart/form-data; boundary=TotvsBoundaryTest' ) //Se desejar informar o boundary
AAdd(aHeadOut,'Content-Type: multipart/form-data')
cPostParms := 'Content-Disposition: form-data; name="FileTextExample"; filename="\Teste.txt" ' + CRLF //Envio de Arquivo especificando o Content-Type
cPostParms += 'Content-Type: text/plain;' + CRLF
// cPostParms += 'Content-Disposition: form-data; name="FileTextExample"; filename="\Teste.txt"' + CRLF //Envio de Arquivo sem espeficar o Content-Type
cPostParms += 'Content-Disposition: form-data; name="someParam"' + CRLF + CRLF //Envio de paramentos. Obrigatório Linha em branco antes do conteúdo
cPostParms += 'someParamValue' //Conteúdo do Parametro
sPostRet := HttpPost( cUrl, "", cPostParms, nTimeOut, aHeadOut, @cHeadRet )
varinfo( "Header", cHeadRet )
if !empty( sPostRet )
conout( "HttpPost OK" )
varinfo( "WebPage", sPostRet )
else
conout("HttpPost Failed.")
endif
return
//Abaixo é exemplificado uma requisição que não é formatada pelo Application Server.
//Isso é últi quando deseja-se montar o multipart manualmente em advpl.
user function postMFData()
Local cUrl := "http://ptsv2.com/t/totvstests/post"
Local nTimeOut := 120
Local aHeadOut := {}
Local cHeadRet := ""
Local sPostRet := ""
Local cPostParms := ""
Local cUser := "totvs"
Local cPass:= "totvs"
Local cCodSiaf := "sp"
Local cXML := "<root><test>Totvs</test></root>"
Local cNameArq := "\Teste.txt"
Local cBoundary := ----WebKitFormBoundaryFbmu0bODj7UvfQEV
AAdd( aHeadOut, 'User-Agent: Mozilla/4.0 (compatible; Protheus ' + GetBuild() + ')' )
AAdd( aHeadOut, 'Content-Type: multipart/form-data; boundary=' + cBoundary )
cPostParms += '--' + cBoundary
cPostParms += CRLF
cPostParms += 'Content-Disposition: form-data; name="login"'
cPostParms += CRLF
cPostParms += CRLF
cPostParms += cUser
cPostParms += CRLF
cPostParms += '--' + cBoundary
cPostParms += CRLF
cPostParms += 'Content-Disposition: form-data; name="senha"'
cPostParms += CRLF
cPostParms += CRLF
cPostParms += cPass
cPostParms += CRLF
cPostParms += '--' + cBoundary
cPostParms += CRLF
cPostParms += 'Content-Disposition: form-data; name="cidade"'
cPostParms += CRLF
cPostParms += CRLF
cPostParms += cCodSiaf
cPostParms += CRLF
cPostParms += '--' + cBoundary
cPostParms += CRLF
cPostParms += 'Content-Disposition: form-data; name="f1"; filename="'+cNameArq+'"'
cPostParms += CRLF
cPostParms += 'Content-Type: text/plain'
cPostParms += CRLF
cPostParms += CRLF
cPostParms += cXML
cPostParms += CRLF
cPostParms += '--' + cBoundary + '--'
sPostRet := HttpPost( cUrl, "", cPostParms, nTimeOut, aHeadOut, @cHeadRet )
varinfo( "Header", cHeadRet )
if !empty( sPostRet )
conout( "HttpPost OK" )
varinfo( "WebPage", sPostRet )
else
conout("HttpPost Failed.")
endif
return
|