Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   llenar datos en una WEB y obtener resultados (https://www.clubdelphi.com/foros/showthread.php?t=93915)

oscarac 07-05-2019 05:03:40

llenar datos en una WEB y obtener resultados
 
desde hace mucho tiempo tuve problemas en resolver un tema que tenia con una pagina llamada SUNAT, en donde obtenia el tipo de cambio

debo reconocer que me costo bastante trabajo entender el uso de IdHttp y de como "lee" una web

es este de aqui http://www.clubdelphi.com/foros/showthread.php?t=91912

ahora tengo un problema "similar" al cual intente darle el mismo tratamiento que utilice para el primer problema, pero no me da resultado

la pagina es

https://e-consultaruc.sunat.gob.pe/c...uc/jcrS00Alias

si se dan cuenta hay que colocar 2 datos RUC y CAPTCHA, luego de presionar buscar "devuelve datos los cuales debo interpretar"


cuando aplico el mismo procedimiento del post adjunto me aparece un mensaje de error que dice

"IOHandler value is not valid"


esta pagina no es muy diferfente a la otra, en ambas debo colocar datos, pero esta ultima al parecer tiene algo especial que no logro entender

si alguien me entendio, espero pueda darme una mano

por lo pronto estoy investigando como "leer" un captcha y convertirlo en texto para "ingresarlo" en la web

dec 07-05-2019 08:52:47

Hola a todos,

El error "IOHandler value is not valid" ocurra, probablemente, porque estás intentando una petición HTTPS, pero, no cuentas con lo necesario para tratar con este tipo de conexiones, diferentes de las HTTP "normales". Busca información al respecto: con Indy se pueden usar las DLL adecuadas para evitar el problema, mejor dicho, para poder trabajar con peticiones HTTPS.

roman 07-05-2019 14:38:35

Además de lo que apunta dec, me pregunto, ¿cómo vas a colocar el captcha? Uno e los objetivos de un captcha es, precisamente, evitar este tipo de atomatizaciones.

// Saludos

oscarac 07-05-2019 16:57:16

La web pertenece al estado peruano, es el ente recaudador de impuestos y tambien contiene el numero de RUC (registro unico de contribuyentes) de todos los contribuyentes valga la redundancia.

entonces la idea es que cuando un cliente/proveedor nuevo sea registrado en el sistema, se busque el numero de RUC, en esa web y obtener automaticamente los datos (ahora solo RUC y razon social y/o nombre de la empresa - anterioemnete venia con direccion / ubicacion etc)

un amigo me paso un procedimiento donde abro la web en cuestion y lleno los datos manualmente y luego "obtengo" la informacion solicitada, funciona, pero queria ver si hay una opcion mas automatizada

cloayza 07-05-2019 22:28:07

Estimado Oscarac puede intentar lo siguiente:

Fuente de consulta: https://github.com/JossMP/sunatphp

1) Se debe obtener el numero aleatorio correspondiente al captcha, para ello se utiliza el siguiente enlace

http://e-consultaruc.sunat.gob.pe/cl...?accion=random

Código Delphi [-]
Const
URLCaptcha='http://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/captcha?accion=random';
var
  retval:String;
begin
    {Ejemplo...}
     edtCaptcha.Text:=IdHTTP1.Get(URLCaptcha);
end;

2) Lo siguiente es formar el URL para realizar la consulta.
Código Delphi [-]
URLQuery='http://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/jcrS00Alias?nroRuc=%s&accion=%s&numRnd=%s';

var
   url:String;
begin
     url:= Format(URLQuery,[edtRUC.Text,  {Número de RUC}
                               edtConsPorRuc.Text, {El contenido debe ser "consPorRuc"}
                               edtCaptcha.Text]);   {Numero aleatorio correspondiente al Captcha}

     memo1.lines.Text:=IdHTTP1.Get(url);
end;

En memo1 quedara el contenido de la pagina web, lo siguiente es buscar la información...


Espero le ayude...

oscarac 07-05-2019 22:51:48

voy a probar la forma como tu indicas CLoayza, pero crees que tambien puedas compartir la fuente?

oscarac 07-05-2019 23:04:35

si, perfecto
funciona
en el memo se "carga" el contenido de la web

existe una forma de ver mas amigable la información contenida en el memo?

roman 08-05-2019 16:05:22

Cita:

Empezado por cloayza (Mensaje 531859)
Estimado Oscarac puede intentar lo siguiente:

Fuente de consulta: https://github.com/JossMP/sunatphp

1) Se debe obtener el numero aleatorio correspondiente al captcha, para ello se utiliza el siguiente enlace

¡Vaya! ¡Qué buen sistema de captcha! :D

// Saludos

oscarac 08-05-2019 16:38:03

Cita:

Empezado por roman (Mensaje 531877)
¡Vaya! ¡Qué buen sistema de captcha! :D

// Saludos

tambien me parecio muy bueno

estuve revisando los resultados de la web, no conozco mucho HTML pero he encontrado esta tabla
Cita:

<td align="center" valign="middle" colspan=1>
<form name="forminfoHist" method="post" action="/cl-ti-itmrconsruc/jcrS00Alias">
<input name="submit" type="submit" class=form-button onClick="submitInforHist()" value="Informaci&oacute;n Hist&oacute;rica">
<input type="hidden" name="accion" value="getinfHis">
<input type="hidden" name="nroRuc" value="10094526332">
<input type="hidden" name="desRuc" value="ASCENCIO CARRASCO OSCAR MAURICIO">
</form>
</td>
forminfoHist

y hay 2 "campos"

nroRUC y desRUC

algun procedimiento para "capturar" esa informacion?

ojo que estoy usando idHttp y que los valores los estoy almacenando en un memo, imagino que el resultado deberia almacenarlo en un componente que maneje HTML

Casimiro Notevi 08-05-2019 17:55:27

Cita:

Empezado por roman (Mensaje 531877)
¡Vaya! ¡Qué buen sistema de captcha! :D
// Saludos

Buenísimo, pongamos la mejor cerradura del mercado, pero deja la llave puesta en la misma.

cloayza 08-05-2019 18:40:25

Cita:

Empezado por Casimiro Notevi (Mensaje 531881)
Buenísimo, pongamos la mejor cerradura del mercado, pero deja la llave puesta en la misma.

También lo pensé, pero no quise comentarlo...:D

Creo que hay espacio para mejorar la seguridad...:D

Saludos

cloayza 08-05-2019 19:54:39

Estimado Oscarac, me intereso el tema y le di un par de vueltas, a ver que le parece...



Código Fuente

Saludos cordiales

oscarac 08-05-2019 20:02:51

las cosas que puedes hacer cuando sabes lo que haces

muchas Gracias

Casimiro Notevi 09-05-2019 01:39:08

He subido el ejemplo a nuestro "FTP", para que no se pierda.

oscarac 09-05-2019 06:34:09

sale un mensaje de error en esta linea

Código Delphi [-]
          key  :=mmStripHTML.Strings.KeyNames[i];

Casimiro Notevi 09-05-2019 10:12:55

Cita:

Empezado por oscarac (Mensaje 531901)
sale un mensaje de error en esta linea

Y el error es...

oscarac 25-07-2019 05:56:23

hola Cloayza

estuve revisando el codigo fuente que colocaste aqui
estoy intentando colocarlo en una libreria, pero no entiendo porque me sale un error

Código Delphi [-]
function _buscarRUC (var _RUC, _RazonSocial, _Direccion :String; _bRUC : Boolean) : string;
var URLCaptcha : string;
    URLQuery : string;
    url:String;
    edtCaptcha, edtConsPorRuc : string;
    _Cadena : WideString;
    i: Integer;
    SRazon : string;
    position, vContador : Integer;
    vCHAR, vCadena: string;
    IdHTTPSunat : TIdHTTP;
    mmData : TMemo;
begin
  _bRUC := False;
  if (_RUC <> '') and (Length (_RUC) = 11) then
  Begin
    _bRUC := true;
    IdHTTPSunat := TIdHTTP.Create();
    edtConsPorRuc := 'consPorRuc';
    URLCaptcha := 'http://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/captcha?accion=random';
    edtCaptcha :=IdHTTPSunat.Get(URLCaptcha);
    URLQuery := 'http://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/jcrS00Alias?nroRuc=%s&accion=%s&numRnd=%s';
    mmData := TMemo.Create(nil);  // si coloco self no me lo compila
    url:= Format(URLQuery,[_RUC,  {Número de RUC}
                           edtConsPorRuc, {El contenido debe ser "consPorRuc"}
                           edtCaptcha]);   {Numero aleatorio correspondiente al Captcha}

     mmData.lines.Text:= IdHTTPSunat.Get(url);   //// aqui sale error

     mmData.lines.Text:= replace_char_with_codes(mmData.lines.Text);

     _RUC := GetValues('xxxxxxxxx">Número de RUC: ',mmData.lines.Text);
  End;

mmData.lines.Text:= IdHTTPSunat.Get(url); //// aqui sale error


en esta linea aparece el error

EinvalidOperation with mensage 'Control' has no parent window`

el xxxxxx en la funcion getValues
va esto

[text](<td width="18%"[ ]*colspan=1[ ]*class="bgn"*>[/text]

cloayza 25-07-2019 15:07:28

Estimado Oscarac, realice las siguientes modificaciones.
Código Delphi [-]
var
...
mmData : TStrings; //TMemo;
begin
...
     mmData := TStringList.create; //TMemo.Create(nil);  // si coloco self no me lo compila
...
    mmData.Text:= IdHTTPSunat.Get(url);   //// aqui sale error
    mmData.Text:= replace_char_with_codes(mmData.Text);   
     _RUC          := GetValues('xxxxxxxxx">Número de RUC: ',mmData.Text);
end;

Saludos cordiales

Nota: El error le indica que el TMemo es un componente visual y por lo tanto requiere tener un padre (ParentControl)...

oscarac 25-07-2019 17:26:57

Cita:

Empezado por cloayza (Mensaje 532923)
Estimado Oscarac, realice las siguientes modificaciones.
Código Delphi [-]
var
...
mmData : TStrings; //TMemo;
begin
...
     mmData := TStringList.create; //TMemo.Create(nil);  // si coloco self no me lo compila
...
    mmData.Text:= IdHTTPSunat.Get(url);   //// aqui sale error
    mmData.Text:= replace_char_with_codes(mmData.Text);   
     _RUC          := GetValues('xxxxxxxxx">Número de RUC: ',mmData.Text);
end;

Saludos cordiales

Nota: El error le indica que el TMemo es un componente visual y por lo tanto requiere tener un padre (ParentControl)...

ah ok
el TMemo necesito un "contenedor" para ser mostrado, eso es lo q entiendo...
voy a probar
gracias

oscarac 07-08-2019 23:54:19

Se me ocurre una pregunta


solo con idHttp se puede acceder a la informacion de una web?

existen otros componentes que me permitan hacer lo mismo?


La franja horaria es GMT +2. Ahora son las 08:31:05.

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