Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-03-2011
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 523
Poder: 21
IVAND Va por buen camino
Enviar datos a un formulario web y obtener respuesta

Hola a todos

Estoy leyendo algunos hilos sobre el tema , pero para serles muy sincero soy totalmente novato en este tema de las web

Pero les comento mis inquietudes a ver si alguien se anima a ayudarme un poco

Tengo una pagina web
https://declaraciones.sri.gov.ec/fac...-documento.jsp

En esta pagina hay unos campos que rellenar para saber si un documento en mi país (Ecuador) es valido , como puedo desde delphi enviar estos parámetros y obtener el dato si es valido o no

Ejemplo para validar

1.- Es valido
Autorizacion=1109046610
Ruc = 1307109957001
tipo de documento FACTURA
Numero de documento 001 002 0045458


2- No valido

Autorizacion=1109046610
Ruc = 1307106037001
tipo de documento FACTURA
Numero de documento 001 002 0045458

Gracias por su tiempo

Un abrazo a la distancia




Utilizo delphi 6 y los componentes INDY ,,

En espera de su amable respuesta quedo muy agradecido
__________________
IVAND

Última edición por IVAND fecha: 17-03-2011 a las 03:03:22.
Responder Con Cita
  #2  
Antiguo 17-03-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.269
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Revisa este hilo; Es muy parecido. Intenta montar un código tal y como está ahí (modificando los campos) y a ver si funciona. a partir de ahí podemos ver dónde está el error.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 17-03-2011
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 523
Poder: 21
IVAND Va por buen camino
Mil gracias por tu respuesta

Lo que indica Roman en ese Post

Código PHP:
</script> 
<form action="/facturacion-internet/consultas/publico/resultado-validez-documento.jspa" method="post" name="forma"> 
<div>&nbsp;</div> 
el metodo es post
peor no se y perdona como enviar los parametros que si los conosco

segun tu codigo

resp := IdHTTP.Post('http://www.ibpindex.com/ibpweb.asp?LAN=es', Params);

La pagina deberia aceptar parametros , pero he intentado enviar directamente los parametros y me indica error en la pagina

o algo estoy haciendo mal

El codigo que indica me da un error en params


Yo supongo que en params , debo enviar los nombres de los campos que estan en el formulario

y de ahi ejecutar la accion del boton que da click y obtener los resultados


Perdoname Neftali pero como que estoy medio confundido

Te pongo el codigo que tengo

Código:
procedure TForm1.Button3Click(Sender: TObject);
var
  Response: String;
  AResponseContent: TMemoryStream;
  resp, ruta:string;
  TS:TStrings;
begin
  Randomize;
  AResponseContent := TMemoryStream.CReate();
  ruta := Trim('Hola'); //solo para probar pues mi pagina no  se ingresa un archivo
  if ruta <> '' then begin

    Params.Clear;
    Params.Values['ruc'] := '1307106037001';
    Params.Values['autorizacion'] := '123455566';
    resp := IdHTTP.Post('https://declaraciones.sri.gov.ec/facturacion-internet/consultas/publico/consulta-validez-documento.jsp'
, Params);
  end;
  // Se supone que resp me envie la respusta de valido o no el documento

  TS := TStringList.Create;
  TS.Add(resp);
  TS.SaveToFile('r:\response' + IntToStr(Random(1000)) + '.txt.html');
  FreeAndNil(TS);

  FreeAndNil(AResponseContent);
end;
no compila da error en params

Gracias por tu tiempo
__________________
IVAND
Responder Con Cita
  #4  
Antiguo 17-03-2011
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 523
Poder: 21
IVAND Va por buen camino
He encontrado un codigo de roman usando webbrowser
que me sirve

Código:
//  form := WebBrowser1.LocationURL('https://declaraciones.sri.gov.ec/facturacion-internet/consultas/publico/consulta-validez-documento.jsp',Sender);
  form := WebBrowser1.OleObject.document.forms.item(0);
  form.item(3).value := '1109285496';
  form.item(4).value := '1307109957001';
  form.item(6).value := '001';
  form.item(7).value := '001';
  form.item(8).value := '0144887';
  form.submit;
pero como puedo hacer para no abrir el navegador y leer la respuesta de la pagina
__________________
IVAND
Responder Con Cita
  #5  
Antiguo 17-03-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No, no. Desecha ese método.

Te pongo un ejemplo usando IdHTTP:

Código Delphi [-]
var
    Url: String;
    Params: TStringList;
    Response: TStringStream;

begin
    Url := 'https://declaraciones.sri.gov.ec/facturacion-internet/consultas/publico/resultado-validez-documento.jspa';

    Params := nil;
    Response := nil;

    try
        Params := TStringList.Create;
        Response := TStringStream.Create('');

        Params.Values['DAY'] := '17';
        Params.Values['MON'] := '3';
        Params.Values['YEAR'] := '2011';
        Params.Values['autorizacion'] := '1109046610';
        Params.Values['ruc'] := '1307109957001';
        Params.Values['tipo_comprobante'] := '1';
        Params.Values['establecimiento'] := '001';
        Params.Values['punto_emision'] := '002';
        Params.Values['documento'] := '0045458';

        IdHttp1.Post(Url, Params, Response);

        Memo1.Lines.Text := Response.DataString;
    finally
        Params.Free;
        Response.Free;
    end;
end;

Ahora, dado que la url usa el protocolo https, no te servirá si lo pones así nada más. Debes agregar un componente IdSSLIOHandlerSocketOpenSSL (también de las Indy) y asignárselo a la propiedad IOHandler del IdHTTP.

// Saludos
Responder Con Cita
  #6  
Antiguo 17-03-2011
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 523
Poder: 21
IVAND Va por buen camino
Mil gracias Roman

Funciona perfecto , me sale un mensaje

Código:
Connection closed Gracefully
Ahora obtengo el dato en el memo , pero como puedo leer especificamente una linea de ese memo

la linea es la que me dice que se valido correctamente o no

en este caso es la

Código:
<div class="merror">El Documento que usted ha consultado, se encuentra autorizado por el SRI, y deber&aacute; contener los
siguientes datos:</div>

O si es mucha molestia me guias como puedo leer lo que me devuelve el memo
para poder colocar ese dato en campos de mi formulario


Gracias y un abrazo a la distancia
__________________
IVAND
Responder Con Cita
  #7  
Antiguo 18-03-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.269
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por roman Ver Mensaje
Ahora, dado que la url usa el protocolo https, no te servirá si lo pones así nada más. Debes agregar un componente IdSSLIOHandlerSocketOpenSSL (también de las Indy) y asignárselo a la propiedad IOHandler del IdHTTP.
¡Qué grande Román! Dicho así parece fácil y todo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 18-03-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ja, ja. Sí parece fácil ¿verdad? Pero lo cierto es que yo no sé casi nada de eso, salvo que lo he usado anteriormente para mandar correo con gmail que usa el protocolo ssl. Pero, a diferencia de aquél caso, aquí parece que no son necesarias las bibliotecas openssl, y eso sí que no lo entiendo, je, je.

// Saludos
Responder Con Cita
  #9  
Antiguo 18-03-2011
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 523
Poder: 21
IVAND Va por buen camino
Gracias a todos por colaborar en mi problema , ya esta solucionado

Mil gracias nuevamente
__________________
IVAND
Responder Con Cita
  #10  
Antiguo 18-03-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola,

Sería bueno que pusieras cómo hiciste para encontrar el dato específico en la página de resultados y así tener la solución completa.

// Saludos
Responder Con Cita
  #11  
Antiguo 18-03-2011
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 523
Poder: 21
IVAND Va por buen camino
Claro , solo hice algo sencillo,

Use un componente Richedit
y busque dentro de el la cadena que busco , si la encuentro el documento es valido , caso contrario no


Código:
procedure TFIng_Fact.Validar_documentoClick(Sender: TObject);
Var
  Encontrado : LongInt;
  Desde, Hasta : Integer;
  Cad : String;
begin
 Cad:='El Documento que usted ha consultado, se encuentra autorizado por el SRI';
  //Ahora la busqueda

  If RichEdit1.SelLength <> 0 then
    Desde := RichEdit1.SelStart + RichEdit1.SelLength
  Else
    Desde := 0;
  Hasta := Length(RichEdit1.Text) - Desde;
  Encontrado := RichEdit1.FindText(Cad, Desde, Hasta, [stMatchCase]);
  If Encontrado <> -1 then
    // ShowMessage('La palabra se encontro en : '+IntToStr(Encontrado))
    Showmessage('Documento autorizado')
  Else
     ShowMessage('Documento no autorizado');
end;
Lo ideal seria tomar los valores que retorna en html y convertirlos en campos en delphi , pero eso aun no se como hacerlo
__________________
IVAND
Responder Con Cita
  #12  
Antiguo 24-10-2013
elmacu elmacu is offline
Registrado
NULL
 
Registrado: feb 2011
Posts: 2
Poder: 0
elmacu Va por buen camino
Roman, como estas?

Te hago una consulta. Por ahi es facil pero no logro dar con la tecla.

Estoy haciendo un POST a una web ASP, y tengo que enviar un token firmado previamente.

Con el WebBrowser lo puedo hacer sin problema, pero con las Indy no logro hacerlo andar.
Según lo que pude encontrar en la web es que viajan de forma distinta los datos o por lo menos van formateados en forma distinta.
Con el WebBrowser envio los datos se la siguiente manera:

Código Delphi [-]

var
  EncodedDataString: string;
  PostData  : OleVariant;
  Headers   : OleVariant;
  i         : integer;
  TokenSend :TStringlist;


begin

  TokenSend:=TStringlist.create;
  TokenSend.LoadFromFile('Token_a_Enviar.txt');

  EncodedDataString := 'XXX='+HTTPEncode('valor1')+'&'+
                                'XXX='+HTTPEncode('valor2')+'&'+
                                'Token='+HTTPEncode(TokenSend.Text);

  PostData := VarArrayCreate([0, length(EncodedDataString)-1], varByte);

  for i := 1 to length(EncodedDataString) do
    PostData[i-1] := ord(EncodedDataString[i]);

  Headers := 'Content-type: application/x-www-form-urlencoded'#10#13;

  WebBrowser1.Navigate('https://..........', EmptyParam, EmptyParam,  PostData, Headers);

Los datos que van dentro del Token_a_Enviar.txt es algo como esto:


Código Delphi [-]
-----BEGIN PKCS7-----
MIIMXwYJKoZIhvcNAQcCoIIMUDCCDEwCAQExCzAJBgUrDgMCGgUAMIGrBgkqhkiG9w0BBwGggZ0E
gZpiYW5jbz0wODE0fGJhbmNvX3NhbT0wODE0fHNlcnZpZG9yPTAwMDF8c3VjdXJzYWw9ODc5OXx0
ZXJtaW5hbD0xNjk5fGNvZF9zZXJ2aWNpbz18cnVicm89fGNvZGlnbz0zMDUzMDU0MzAwMzE1MTIw
MDAyMjQwMDEwMjMwMDAwMjI0MDAxMDIzMTN8SW1wb3J0ZU1hbnVhbD18oIIIWzCCCFcwggY/oAMC
AQICAQQwDQYJKoZIhvcNAQEFBQAwgfwxCzAJBgNVBAYTAkFSMSgwJgYDVQQIEx9DaXVkYWQgQXV0
b25vbWEgZGUgQnVlbm9zIEFpcmVzMSgwJgYDVQQHEx9DaXVkYWQgQXV0b25vbWEgZGUgQnVlbm9z
IEFpcmVzMSIwIAYDVQQKExlCYXBybyBNZWRpb3MgZGUgUGFnbyBTLkEuMSUwIwYDVQQLExxUZWNu
-----END PKCS7-----

Luego en el evento "WebBrowser1NavigateComplete2" me hago del resultado.

Quisiera hacer lo mismo con las Indy.
Ya que aunque me devuelva error de que ingrese mal los datos, la obtención del resultado es más rapida.

Intente de varías manera, pero no lo he logrado...

Este es uno de los intentos, con las Indys.::
Código Delphi [-]

        Token_Send:=TStringlist.create;
        Token_Send.LoadFromFile('Token_a_Enviar.txt');
        Params := TStringStream.create('');
        Params.WriteString(URLEncode('XXX=' + 'valor1' + '&'));
        Params.WriteString(URLEncode('XXX=' + 'valor2' + '&'));
        Params.WriteString(URLEncode('Token=' +Token_Send.Text));

        sHttpSocket := TIdHTTP.Create;
        try
          //como es una llamada a una https, asigno el HandlerSSL
          sshSocketHandler := TIdSSLIOHandlerSocketOpenSSL.Create(sHttpSocket);
          sshSocketHandler.Intercept:= TIdConnectionIntercept(IdLogFile1);
          sHttpSocket.IOHandler := sshSocketHandler;
          sHttpSocket.ReadTimeout:=15000;

          sHttpSocket.Request.ContentType := 'Content-type: application/x-www-form-urlencoded'#10#13;
          //creo el dato que va a obtener la respuesta
          resStreamRes:= TStringlist.create;
          //Hago la llamada
          sHttpSocket.post('https://.....',Params, resStream);
          //Obtengo respuesta y guardo 
          resStreamRes.Add(resStream.DataString);
          resStreamRes.SaveToFile('Resultado.txt');
        Except
        on E: EIdHTTPProtocolException do
        begin
        end;

Por ahora con el WebBrowser salgo del apuro, pero quisiera hacerlo mas optimo...
Desde ya mil gracias!

Sdos.-
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Obtener solo los nuevos correos (seguramente sin respuesta) Enan0 Internet 1 02-04-2010 15:20:07
Enviar datos de un formulario a una pagina barracuda PHP 3 28-11-2007 21:08:40
Enviar datos de un formulario lucasarts_18 HTML, Javascript y otros 2 19-12-2006 17:18:26
Tiempo de respuesta en Volumen de datos saulpm007 Firebird e Interbase 0 13-10-2004 02:19:10


La franja horaria es GMT +2. Ahora son las 01:07:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi