Enviar XML via POST
Olá Pessoal.
Estou tendo dificuldade em enviar um xml via post. O servidor sempre me da resposta que não foi enviado nenhum arquivo.
Abaixo segue exemplo de como estou fazendo:
//Gerando o XML
XMLEnvio.AddChild('Produtos');
XMLEnvio.DocumentElement.ChildNodes['Produto'].AddChild('referencia').NodeValue := '120';
XMLEnvio.DocumentElement.ChildNodes['Produto'].AddChild('qtd_estqoue').NodeValue := 50;
//Enviar XML
idHTTP.Request.ContentType := 'text/xml';
IdHTTP.Post('http://www.teste.com.br/xml/atualizacao_estoque.php', XMLEnvio.XML, Resposta);
Ele sempre me retorna que não foi enviado arquivo.
Já tentei trocar o XMLEnvio.XML por: caminho e nome do arquivo xml salvo, TStringList, TStringStream e TFileStream ambos ocorrem mesma coisa.
Alguma ideia?
Estou tendo dificuldade em enviar um xml via post. O servidor sempre me da resposta que não foi enviado nenhum arquivo.
Abaixo segue exemplo de como estou fazendo:
//Gerando o XML
XMLEnvio.AddChild('Produtos');
XMLEnvio.DocumentElement.ChildNodes['Produto'].AddChild('referencia').NodeValue := '120';
XMLEnvio.DocumentElement.ChildNodes['Produto'].AddChild('qtd_estqoue').NodeValue := 50;
//Enviar XML
idHTTP.Request.ContentType := 'text/xml';
IdHTTP.Post('http://www.teste.com.br/xml/atualizacao_estoque.php', XMLEnvio.XML, Resposta);
Ele sempre me retorna que não foi enviado arquivo.
Já tentei trocar o XMLEnvio.XML por: caminho e nome do arquivo xml salvo, TStringList, TStringStream e TFileStream ambos ocorrem mesma coisa.
Alguma ideia?
Samuel Basso
Curtidas 0
Melhor post
Claudia Nogueira
02/12/2012
Com base nesse form de exemplo que você postou, chego a conclusão que se simularmos o envio de um form com enctype="multipart/form-data" com um input type= file com name=xml vamos conseguir.
Fiz uns testes em localhost e consegui chegar no seguinte código:
Adicione IdMultipartFormData e XmlDoc nos uses do form.
Fiz uns testes em localhost e consegui chegar no seguinte código:
Adicione IdMultipartFormData e XmlDoc nos uses do form.
Var Response: TStringStream; Arquivo: TIdMultipartFormDataStream; XMLEnvio : TXMLDocument; begin XMLEnvio := TXMLDocument.Create(Nil); XMLEnvio.Active := True; XMLEnvio.AddChild('Produtos'); XMLEnvio.DocumentElement.ChildNodes['Produto'].AddChild('referencia').NodeValue := '120'; XMLEnvio.DocumentElement.ChildNodes['Produto'].AddChild('qtd_estqoue').NodeValue := 50; XMLEnvio.SaveToFile('c:\temp.xml'); Response := TStringStream.Create(''); Arquivo := TIdMultiPartFormDataStream.Create; Arquivo.AddFile('xml', 'c:\temp.xml', 'xml/text'); IdHTTP.Request.CustomHeaders.Clear; IdHTTP.Request.Clear; IdHTTP.Request.ContentType := 'application/x-www-form-urlencoded'; IdHTTP.Request.ContentEncoding := 'multipart/form-data'; IdHTTP.Request.Referer := 'http://www.testetestecom.br/xml/atualizacao_estoque.php'; IdHTTP.Post('http://www.testetestecom.br/xml/atualizacao_estoque.php', Arquivo, Response); ShowMessage(Response.DataString); end;
GOSTEI 1
Mais Respostas
Claudia Nogueira
30/11/2012
O que tem no arquivo atualizacao_estoque.php?
E qual a mensagem exata de retorno?
E qual a mensagem exata de retorno?
GOSTEI 0
Samuel Basso
30/11/2012
O arquivo PHP não tenho, pois é outra empresa que desenvolveu, porém o arquivo que gero xml se mandar manualmente por uma página que eles criaram funciona, mas direto via post no delphi não.
<div>
<form action="http://www.testetestecom.br/xml/atualizacao_estoque.php" method="post" enctype="multipart/form-data" name="0.1_form1" target="_blank" onsubmit="return window.confirm("You are submitting information to an external page.\nAre you sure?");">
<input type="file" name="xml">
<br>
<br>
<input type="submit" name="button" value="Enviar">
</form>
</div>
</body></html>
Se eu executar isso no navegador, escolher o arquivo xml e enviar funciona. E como falei utilizando o POST e o mesmo endereço não está funcionando.
Não sei se consegui ser claro.
<div>
<form action="http://www.testetestecom.br/xml/atualizacao_estoque.php" method="post" enctype="multipart/form-data" name="0.1_form1" target="_blank" onsubmit="return window.confirm("You are submitting information to an external page.\nAre you sure?");">
<input type="file" name="xml">
<br>
<br>
<input type="submit" name="button" value="Enviar">
</form>
</div>
</body></html>
Se eu executar isso no navegador, escolher o arquivo xml e enviar funciona. E como falei utilizando o POST e o mesmo endereço não está funcionando.
Não sei se consegui ser claro.
GOSTEI 0
Samuel Basso
30/11/2012
Perfeito funcionou. Muito obrigado.
Só para eu entender, a diferença foi na utilização do TIdMultiPartFormDataStream ?? Pois tentei como falei com TString, Stream, FileStream, e nenhum deles consegui. Agora com sua dica funcionou perfeitamente.
Mais uma vez muito obrigado.
Só para eu entender, a diferença foi na utilização do TIdMultiPartFormDataStream ?? Pois tentei como falei com TString, Stream, FileStream, e nenhum deles consegui. Agora com sua dica funcionou perfeitamente.
Mais uma vez muito obrigado.
GOSTEI 0
Claudia Nogueira
30/11/2012
A diferença foi o TIdMultiPartFormDataStream mesmo. Somente assim pra digamos assim, enviar um arquivo. Que bom que funcionou.
Perfeito funcionou. Muito obrigado.
Só para eu entender, a diferença foi na utilização do TIdMultiPartFormDataStream ?? Pois tentei como falei com TString, Stream, FileStream, e nenhum deles consegui. Agora com sua dica funcionou perfeitamente.
Mais uma vez muito obrigado.
Só para eu entender, a diferença foi na utilização do TIdMultiPartFormDataStream ?? Pois tentei como falei com TString, Stream, FileStream, e nenhum deles consegui. Agora com sua dica funcionou perfeitamente.
Mais uma vez muito obrigado.
GOSTEI 0
Alexandre
30/11/2012
Sou programador delphi de um hotel e me deram a tarefa de integrar um servico de reservas on-line com
O meu programa que roda aqui no hotel.
Tenho de consumir um web-service da seguinte maneira:
Tenho de enviar um xml para eles e eles me retornam outro com os dados que precisso, ou seja
O xml que envio tem username,senha,idhotel e periodos
O xml que eles retornam tem todas as reservas que foram feitas la no site de reservas deles Ou seja hoje funciona assim:
- hoje o funcionario de reservas entra no site das reservas on-line, imprimi todas as reservas e digita no meu programa
Depois da implantacao do (Consumir web-service) e pra ficar assim:
- terei uma aplicacao delphi minimizada que ficara a cada 5 minutos enviando um xml e recebendo outro
E quando receber automaticamente incluirar as reservas no meu programa.
-AGORA O PROBLEMA:
Já faz uma semana que quase não durmo e não consigo enviar um arquivo xml ou as linhas do xml para o web-service
E receber o xml de volta. Já fiz de tudo idhttp, httprio, etc, etc.
O pessoal do web-service dispobibilizou o WSDL os manuais e tudo mais, mas mesmo assim não consigo.
VOCE PODE ME AJUDAR, SO PRECISO ENVIAR E RECEBER, SO QUERO O REQUEST E O RESPONSE O RESTO EU FAÇO.
VOCE PODE ME COBRAR PELA AJUDA, POIS SE EU NÃO CONSEGUIR PERDEREI MEU EMPREGO E SO TENHO MAIS DOIS DIAS.
ALEXANDRE PESSOA
alexandre@pesistemas.com.br
solucoeshotel@hotmail.com
81 9615-2319
GEREI ESTE XML, ENVIEI PARA O PESSOAL DO WEB SERVICE E ME FALARAM QUE ESTAVA CERTINHO, SO NÃO SEI ENVIAR.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="XmlServices">
<soapenv:Header/>
<soapenv:Body>
<xs:GetOrders>
<xs:request>
<xs:Credentials>
<xs:UserName>rob2@rob.pl</xs:UserName>
<xs:Password>tester101</xs:Password>
<xs:HotelId>3</xs:HotelId>
</xs:Credentials>
<xs:SubmittedSince>2010/01/01</xs:SubmittedSince>
<xs:SubmittedTill>2015/06/01</xs:SubmittedTill>
<xs:StatusChangedSince>2010/01/01</xs:StatusChangedSince>
<xs:StatusChangedTill>2015/06/01</xs:StatusChangedTill>
<xs:ArrivalSince>2010/01/01</xs:ArrivalSince>
<xs:ArrivalTill>2015/06/01</xs:ArrivalTill>
</xs:request>
</xs:GetOrders>
</soapenv:Body>
</soapenv:Envelope>
ME RETORNAM ESTA TELA ABAIXO FALANO QUE ESTAVA OK
Olá Alexandre
Realizei um teste e funciona corretamente, verifique:
REQUEST:
URL: http://hoteltool.yieldplanet.com/XmlServices/ChannelManager.asmx?WSDL
Host: hoteltool.yieldplanet.com
Content-Type: text/xml; charset=utf-8
SOAPAction: "XmlServices/GetOrders"
Content-Length: 804
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetOrders xmlns="XmlServices">
<request>
<Credentials>
<UserName>rob2@rob.pl</UserName>
<Password>tester101</Password>
<HotelId>3</HotelId>
</Credentials>
<SubmittedSince>2010-01-01</SubmittedSince>
<SubmittedTill>2015-06-01</SubmittedTill>
<StatusChangedSince>2010-01-01</StatusChangedSince>
<StatusChangedTill>2015-06-01</StatusChangedTill>
<ArrivalSince>2010-01-01</ArrivalSince>
<ArrivalTill>2015-06-01</ArrivalTill>
</request>
</GetOrders>
</soap:Body>
</soap:Envelope>
RESPONSE:
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 05 Jun 2015 15:35:18 GMT
Content-Length: 159372
Por favor verifique se em vosso código está tudo igual ao descrito acima, também podes encontrar como realizar o request no link abaixo:
http://hoteltool.yieldplanet.com/XmlServices/ChannelManager.asmx
O meu programa que roda aqui no hotel.
Tenho de consumir um web-service da seguinte maneira:
Tenho de enviar um xml para eles e eles me retornam outro com os dados que precisso, ou seja
O xml que envio tem username,senha,idhotel e periodos
O xml que eles retornam tem todas as reservas que foram feitas la no site de reservas deles Ou seja hoje funciona assim:
- hoje o funcionario de reservas entra no site das reservas on-line, imprimi todas as reservas e digita no meu programa
Depois da implantacao do (Consumir web-service) e pra ficar assim:
- terei uma aplicacao delphi minimizada que ficara a cada 5 minutos enviando um xml e recebendo outro
E quando receber automaticamente incluirar as reservas no meu programa.
-AGORA O PROBLEMA:
Já faz uma semana que quase não durmo e não consigo enviar um arquivo xml ou as linhas do xml para o web-service
E receber o xml de volta. Já fiz de tudo idhttp, httprio, etc, etc.
O pessoal do web-service dispobibilizou o WSDL os manuais e tudo mais, mas mesmo assim não consigo.
VOCE PODE ME AJUDAR, SO PRECISO ENVIAR E RECEBER, SO QUERO O REQUEST E O RESPONSE O RESTO EU FAÇO.
VOCE PODE ME COBRAR PELA AJUDA, POIS SE EU NÃO CONSEGUIR PERDEREI MEU EMPREGO E SO TENHO MAIS DOIS DIAS.
ALEXANDRE PESSOA
alexandre@pesistemas.com.br
solucoeshotel@hotmail.com
81 9615-2319
GEREI ESTE XML, ENVIEI PARA O PESSOAL DO WEB SERVICE E ME FALARAM QUE ESTAVA CERTINHO, SO NÃO SEI ENVIAR.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="XmlServices">
<soapenv:Header/>
<soapenv:Body>
<xs:GetOrders>
<xs:request>
<xs:Credentials>
<xs:UserName>rob2@rob.pl</xs:UserName>
<xs:Password>tester101</xs:Password>
<xs:HotelId>3</xs:HotelId>
</xs:Credentials>
<xs:SubmittedSince>2010/01/01</xs:SubmittedSince>
<xs:SubmittedTill>2015/06/01</xs:SubmittedTill>
<xs:StatusChangedSince>2010/01/01</xs:StatusChangedSince>
<xs:StatusChangedTill>2015/06/01</xs:StatusChangedTill>
<xs:ArrivalSince>2010/01/01</xs:ArrivalSince>
<xs:ArrivalTill>2015/06/01</xs:ArrivalTill>
</xs:request>
</xs:GetOrders>
</soapenv:Body>
</soapenv:Envelope>
ME RETORNAM ESTA TELA ABAIXO FALANO QUE ESTAVA OK
Olá Alexandre
Realizei um teste e funciona corretamente, verifique:
REQUEST:
URL: http://hoteltool.yieldplanet.com/XmlServices/ChannelManager.asmx?WSDL
Host: hoteltool.yieldplanet.com
Content-Type: text/xml; charset=utf-8
SOAPAction: "XmlServices/GetOrders"
Content-Length: 804
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetOrders xmlns="XmlServices">
<request>
<Credentials>
<UserName>rob2@rob.pl</UserName>
<Password>tester101</Password>
<HotelId>3</HotelId>
</Credentials>
<SubmittedSince>2010-01-01</SubmittedSince>
<SubmittedTill>2015-06-01</SubmittedTill>
<StatusChangedSince>2010-01-01</StatusChangedSince>
<StatusChangedTill>2015-06-01</StatusChangedTill>
<ArrivalSince>2010-01-01</ArrivalSince>
<ArrivalTill>2015-06-01</ArrivalTill>
</request>
</GetOrders>
</soap:Body>
</soap:Envelope>
RESPONSE:
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 05 Jun 2015 15:35:18 GMT
Content-Length: 159372
Por favor verifique se em vosso código está tudo igual ao descrito acima, também podes encontrar como realizar o request no link abaixo:
http://hoteltool.yieldplanet.com/XmlServices/ChannelManager.asmx
GOSTEI 0
Elvys
30/11/2012
Ola Alexandre, estou com a mesma dificuldade. Tenho um link wsdl, fiz o import da estrutura. Porem não sei como faço para enviar o xml direto via webservice.
Não quero passar os parametros dos metodos do wsdl. Gostaria de enviar o xml já criado direto. Igual o seu que já tem um xml envelope criado.
É possível?
Teve algum sucesso?
Não quero passar os parametros dos metodos do wsdl. Gostaria de enviar o xml já criado direto. Igual o seu que já tem um xml envelope criado.
É possível?
Teve algum sucesso?
GOSTEI 0
Gabriel Baltazar
30/11/2012
Fiz isso recentemente. Vai no BeforeExecute do seu HttpRio e altera o SoapRequest com o xml que quer enviar
GOSTEI 0
Dirceu Morais
30/11/2012
Gente estou precisando de um favor, dê uma olhadinha em um destes link:
Consumir Webservice
e/ou neste
devmedia.com.br/forum/ancine-sistema-de-controle-de-bilheteria/562393
Estou precisando consumir uma webservice e estou tendo dificuldades.
Desde já agradeço
Consumir Webservice
e/ou neste
devmedia.com.br/forum/ancine-sistema-de-controle-de-bilheteria/562393
Estou precisando consumir uma webservice e estou tendo dificuldades.
Desde já agradeço
GOSTEI 0