Como pegar o retorno de uma chamada HTTP? - XML

Delphi

30/08/2008

Pessoal tenho que chamar dentro do meu programa um HTTP para efetuar uma transação. Essa HTTP retorna um XML, chama o HTTP é simples agora quero saber como pego esse retorno XML


https://conta.brtecno.com/clx/
sendsms.php?username=xxxxxxxxxx&pa
ssword=xxxxxxxxxx&from=xxxxxxxxxx&
to=xxxxxxxxxx&valuet=xxxxxxxxxx 


Isso retorna um XML assim:

Successfull:
<?xml version="1.0" encoding="utf-8" ?>
- <PriceResponse>
<version>1</version>
<result>1</result>
<resultstring>success</resultstring>
<description />
<endcause />
</PriceResponse> 


Como vocês fariam para chamar esse URL e pegar esse retorno.

Obrigado


Yallebr

Yallebr

Curtidas 0

Melhor post

Janbaceiredo

Janbaceiredo

19/09/2008

Se vc estiver usando o WebBrower vc pode pegar o codigo HTML de retorno.
É assim que eu faço com a Receita Federal e Sintegra, jogando essas informações automaticamente no banco de dados.
Uma forma de realizar seria:
1º Coloque um TWebBrower
2º Um Memo
3º Um Botao
4º Declara a Uses mshtml;

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw, mshtml;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate(´https://myaccount.12voip.com/clx/sendsms.php?username=janbaceiredo&password=280000&from=551897950649&to=551897950649&text=xxxxxxxxxx´);
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  sHTML : IHTMLElement;
  Teste: String;
begin
     sHTML:= (WebBrowser1.Document AS IHTMLDocument2).body;

     while sHTML.parentElement <> nil do
     begin
       sHTML := sHTML.parentElement;
     end;
     Teste:= UpperCase(sHTML.outerHTML);
     Memo1.Text:= Teste;
end;

end.


Dessa forma vc pode realizar um pesquisa pela string de retorno do HTML.

Mais seria interessante analisar o codido do Luciano. Estou tentando fazer ele funcionar mais ate o momento sem sucesso na alteração da Indy.
Valeu T+.


GOSTEI 1

Mais Respostas

Janbaceiredo

Janbaceiredo

30/08/2008

Ai colega blz...
Bom vejamos se eu entendi.
Vc quer acessar uma pagina fazendo auto-login. Apos logar, o sistema irá retornar um XML para voce.
Voce quer capturar esse XML na sua aplicacao?

É isso mesmo que vc quer???

Se for poderiamos estar usando o componente TWebBrowser com algumas funções.


GOSTEI 0
Yallebr

Yallebr

30/08/2008

Olá amigo,

Isso mesmo. O que não consegui foi pegar isso do TWebBrowser. Poderia me dar um exemplo?


GOSTEI 0
Janbaceiredo

Janbaceiredo

30/08/2008

Vamos por parte então.
Qual seria o endereço que vc esta tentando acessar???
Vc pode passar para eu fazer um exemplo para vc?


GOSTEI 0
Janbaceiredo

Janbaceiredo

30/08/2008

Outra questao é: Como vc esta fazendo esse acesso.
Quais os componentes?


GOSTEI 0
Diegotiemann

Diegotiemann

30/08/2008

Pessoal estou tentando resolver umproblema parecido.

Tenho um sistema para gerência de escritórios de advogacia,
osistema esta bem completo mas já estou pesquisando a meses como fazer um esquema de validação,ou seja jogar a imagem de validação do site num TImage e mostar-lá ao meu usuário dai ele pode fazero acompanhamento processual direto pelo meu programa e ainda consigo importar os processos para o BD do meu programa.


O site é esse:
http://www.tj.rs.gov.br/site_php/consulta/index.php


GOSTEI 0
Yallebr

Yallebr

30/08/2008

Posso sim.

A URL é essa:

https://myaccount.12voip.com/clx/sendsms.php?username=xxxxxxxxxx&password=xxxxxxxxxx&from=xxxxxxxxxx&to=xxxxxxxxxx&text=xxxxxxxxxx


Estou usando TWebBrowser e apenas executando essa URL.

Abração


GOSTEI 0
Yallebr

Yallebr

30/08/2008

SOBE!!!


GOSTEI 0
Luciano.lirio

Luciano.lirio

30/08/2008

cara, faz o seguinte,

vai no link [url]http://indy.fulgan.com/SSL/openssl-0.9.8h-i386-win32-Indy-IntraWebEdition.zip[/url], baixe o arquivo descompacte em qualquer lugar, peque os arquivos libeay32.dll e ssleay32.dll e coloque no diretório C:\WINDOWS\system32, leia o arquivo readme.txt onde tem a instrução de pegar o arquivo IdSSLOpenSSLHeaders10.pas renomear para IdSSLOpenSSLHeaders.pas e substituir o original instalado junto com o Indy, não esqueça de guardar uma cópia do original caso de algum problema.

Feito isso, use o código abaixo
procedure TForm1.Button1Click(Sender: TObject);
var
  Html: TStringList;
  Urls: String;
begin
  try
    Urls := ´https://myaccount.12voip.com/clx/sendsms.php?username=xxxxxxxxxx&password=xxxxxxxxxx&from=xxxxxxxxxx&to=xxxxxxxxxx&text=xxxxxxxxxx´;
    //Urls := ´http://www.microsoft.com´;

    IdHTTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;

    Html := TStringList.Create;
    Html.Text := IdHTTP1.Get(Urls);
    Memo1.Text := Html.Text;
    Html.Free;
  except
    on E: Exception do
      Memo1.Text := E.Message;
  end;
end;


deixei um exemplo funcionando no link [url]http://www.mattos.eti.br/IDHTTP.zip[/url].

Obs.: Deixando os arquivos libeay32.dll e ssleay32.dll junto com o executavel também funciona.

Espero ajudar.

Att,


GOSTEI 0
Janbaceiredo

Janbaceiredo

30/08/2008

Yallebr, desculpa a demora na resposta.
Estarei hoje apos o almoço no escritorio e te explico como pode fazer isso é bem simples.
Só uma duvida esse SMS que vc esta enviando não é tarifado aqui no Brasil??? Fiz alguns teste aqui e enviou tudo numa boa sem cobrar. Se nao tiver cobrança de tarifa irei colocar em meu sistema tb.
Valeu amigo, ate daqui a pouco.


GOSTEI 0
Luciano.lirio

Luciano.lirio

30/08/2008

janbaceiredo,

vc está com a versão que vem instalada no delphi?

eu uso o delphi 7 e atualizei o indo para a versão Indy 10.

o exemplo que deixei compilado no link funcionou?


GOSTEI 0
Janbaceiredo

Janbaceiredo

30/08/2008

Luciano,

o compilado funcionou sim.
Estou usando o Delphi2007.
O problema esta na referencia:
IdHTTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1; 


Mais vou verificar a Indy.
Só acrecentando o seu exemplo é bem melhor do o meu.
Valeu T+


GOSTEI 0
Janbaceiredo

Janbaceiredo

30/08/2008

A alteração dos arquivos *.pas ja estao OK!!!
Agora estas dando a msg: Could not load SSL library.
Já coloquei na pasta System32 as duas DLL e tb na pasta da aplicacao.
Mas mesmo assim sem exito.


GOSTEI 0
Luciano.lirio

Luciano.lirio

30/08/2008

janbaceiredo,

da uma olhada no nome das dlls especificadas no arquivo IdSSLOpenSSLHeaders.pas.

tem que estar:
SSL_DLL_name = ´ssleay32.dll´; {Do not localize}
SSLCLIB_DLL_name = ´libeay32.dll´; {Do not localize}

esse erro que ve falou deu nos meus teste porque o nome das dlls estavam diferentes.

Att,


GOSTEI 0
Janbaceiredo

Janbaceiredo

30/08/2008

Realizei as alterações na Unit mais mesmo assim apresentando o mesmo erro.
TEria que recompilar a Indy???


GOSTEI 0
Luciano.lirio

Luciano.lirio

30/08/2008

janbaceiredo,

aconcelho vc a baixar a versão atual do indy e reinstalar no teu delphi, faça isso mesmo que o delphi tenha a versão atual instalada, o indy que vem no delphi sempre da problemas...

após reinstalar o delphi atualise o arquivo IdSSLOpenSSLHeaders.pas pelo IdSSLOpenSSLHeaders10.pas.

Att,


GOSTEI 0
Luciano.lirio

Luciano.lirio

30/08/2008

Correção

após reinstalar Indy no delphi atualise o arquivo IdSSLOpenSSLHeaders.pas pelo IdSSLOpenSSLHeaders10.pas.


GOSTEI 0
POSTAR