• Publicidad

Get a página HTTPS

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Get a página HTTPS

Notapor rraulqm92 » 2014-12-24 02:35 @149

Hola,

Necesitaría acceder a una página con certificado.

Intento hacer algo parecido a esto pero me salta error 500... He probado varias cosas pero no he podido acceder y descargarme el código.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $url_concurso ='https://contrataciondelestado.es/wps/poc?uri=deeplink:detalle_licitacion&idEvl=SEzG1KS99dkQK2TEfXGy%2BA%3D%3D';
  2. my $mech = WWW::Mechanize->new( autocheck => 0);
  3. $mech->agent_alias('Windows IE 6');
  4. $mech->get($url_concurso);
  5. my $html_concurso = $mech->content;
  6. print $html_concurso;
  7.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
rraulqm92
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2014-10-07 04:29 @228

Publicidad

Re: Get a página HTTPS

Notapor explorer » 2014-12-24 07:26 @352

Eso está respondido en el apartado Why don't https:// URLs work? (¿Por qué no funcionan las URL 'https://'?) en WWW::Mechanize::FAQ.

Necesitas tener instalado Crypt::SSLeay o IO::Socket::SSL y casi seguro LWP::Protocol::https.

Mira este hilo: Autologin en página con HTTPS, WWW::Mechanize HTTPS y Mechanize HTTPS (estos dos últimos en inglés).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Get a página HTTPS

Notapor rraulqm92 » 2014-12-29 03:22 @182

Este es el fallo que me salta cuando pongo los módulos que me has dicho...

[2014/12/29 09:19:01] url: 1 1 https://contrataciondelestado.es/wps/po ... %2BA%3D%3D
Can't connect to contrataciondelestado.es:443 (certificate verify failed)

LWP::Protocol::https::Socket: SSL connect attempt failed error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed at /usr/local/share/perl5/LWP/Protocol/http.pm line 49.
rraulqm92
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2014-10-07 04:29 @228

Re: Get a página HTTPS

Notapor explorer » 2014-12-29 05:42 @279

El problema es que mientras el sitio tiene un certificado SSL, no es válido para el sitio, y falla la verificación. Si estuviéramos en un navegador web, éste sacaría el aviso de excepción de seguridad para preguntarnos si deseas crear una excepción para este sitio y seguir adelante con la conexión. En cambio, con el get() de nuestro programa, siempre lo muestra como fallo.

Si falla la verificación es porque el software LWP no encuentra o no le has dicho dónde están los certificados digitales de las entidades raíz.

Eso se indica con el método ssl_opts() o con las variables de entorno HTTPS_CA_FILE y HTTPS_CA_DIR. Previamente, debes haberte descargado e instalado el certificado digital raíz para ese sitio, que veo que es el FNMT Clase 2 CA.

Hay otra opción... decirle a LWP que no haga la verificación del sitio web: poniendo la variable de entorno PERL_LWP_SSL_VERIFY_HOSTNAME a 0, dejará de hacerlo. O poniendo a cero el valor de la opción verify_hostname en el método ssl_opts().

Ejemplo. Más información.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Get a página HTTPS

Notapor rraulqm92 » 2014-12-29 06:36 @317

¿Crees que es esta la manera de hacerlo?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $mech = WWW::Mechanize->new( autocheck => 0,
  2.                                 SSL_ca_path => '/etc/ssl/certs',
  3.                                 SSL_ca_file => '/etc/ssl/certs/FNMTClase2CA.cer');
  4. $mech->agent_alias('Windows IE 6');
  5. $mech->get($url_concurso);
  6. print $mech->content;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¡Gracias!
rraulqm92
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2014-10-07 04:29 @228

Re: Get a página HTTPS

Notapor explorer » 2014-12-29 10:43 @488

Prueba...

Y si no funciona, le pones el

verify_hostname => 0,

y listo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Get a página HTTPS

Notapor rraulqm92 » 2014-12-29 11:18 @512

explorer escribiste:Prueba...

Y si no funciona, le pones el

verify_hostname => 0,

y listo.


¡Bah...! Ni una cosa ni otra, siempre salta el mismo error de los cojones.
rraulqm92
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2014-10-07 04:29 @228

Re: Get a página HTTPS

Notapor explorer » 2014-12-29 21:28 @936

Asegúrate de que tienes instalada la última versión de LWP.

Yo he probado con lo siguiente, y funciona:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;
  3. use WWW::Mechanize;
  4.  
  5. my $url_concurso = 'https://contrataciondelestado.es/wps/poc?uri=deeplink:detalle_licitacion&idEvl=kOZNaTQ6jeAQK2TEfXGy%2BA%3D%3D';
  6.  
  7. my $mech = WWW::Mechanize->new(
  8.     autocheck   => 0,
  9.     ssl_opts    => {
  10.         verify_hostname => 0,
  11.         SSL_verify_mode => 'SSL_VERIFY_NONE',
  12.     },
  13. );
  14. $mech->agent_alias('Linux Mozilla');
  15.  
  16. $mech->get($url_concurso);
  17. print $mech->content;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
La clave estaba en la opción SSL_verify_mode, que es para el módulo IO::Socket::SSL, para que, explícitamente, no haga la verificación del certificado digital del destino.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Get a página HTTPS

Notapor rraulqm92 » 2014-12-31 04:57 @248

explorer escribiste:Asegúrate de que tienes instalada la última versión de LWP.

Yo he probado con lo siguiente, y funciona:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;
  3. use WWW::Mechanize;
  4.  
  5. my $url_concurso = 'https://contrataciondelestado.es/wps/poc?uri=deeplink:detalle_licitacion&idEvl=kOZNaTQ6jeAQK2TEfXGy%2BA%3D%3D';
  6.  
  7. my $mech = WWW::Mechanize->new(
  8.     autocheck   => 0,
  9.     ssl_opts    => {
  10.         verify_hostname => 0,
  11.         SSL_verify_mode => 'SSL_VERIFY_NONE',
  12.     },
  13. );
  14. $mech->agent_alias('Linux Mozilla');
  15.  
  16. $mech->get($url_concurso);
  17. print $mech->content;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
La clave estaba en la opción SSL_verify_mode, que es para el módulo IO::Socket::SSL, para que, explícitamente, no haga la verificación del certificado digital del destino.



¡Pedazo de GENIO!

Ya he conseguido que me funcione. ¡Muchas gracias, de verdad!
rraulqm92
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2014-10-07 04:29 @228


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado