• Publicidad

HTTP::Request/LWP::UserAgent

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

HTTP::Request/LWP::UserAgent

Notapor situ » 2011-03-14 12:23 @558

Buenas,
Los molesto porque estoy intentando jugar con user-agent y el contenido que me muestra según sea el UA.
El script me funciona perfecto. El tema es que quiero guardar los output con el nombre del user agent, el cual muchas veces es de muchos caracteres.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. BEGIN {
  3.  
  4.     eval "use HTTP::Request";
  5.  
  6.     if ( $@ ) {
  7.  
  8.         warn  "Error al cargar el modulo: HTTP::Request\n"
  9.  
  10.         . "Instalar Modulo:\n"      
  11.  
  12.         . "\t\tcpan\n"
  13.  
  14.         . "\t\tcpan> install HTTP::Request\n";
  15.  
  16. exit ();
  17.  
  18.  }
  19.  
  20. }
  21.  
  22. use LWP::UserAgent;
  23. use HTTP::Request;
  24.  
  25. if ( @ARGV != 2 ) {
  26.  
  27.     die "\nUso: $0 <url> <user-agents.txt>\n\n"
  28.  
  29.       . "   <url>                Dominio a probar       [ej -> http://www.domain.com]\n"
  30.       . "   <user-agents.txt>    Lista de users-agents  [ej -> user-agents.txt]\n"
  31.       ;
  32.  
  33. }
  34.  
  35. $url= $ARGV[0];
  36. chomp $url;
  37.  
  38. $file = $ARGV[1];
  39. chomp $file;
  40.  
  41. # Si la url no tiene http: al principio
  42. if ( $url !~ /^http:/ ) {
  43. # lo añadimos
  44. $url = "http://" . $url;
  45. }
  46.  
  47. # Si la url no tiene / al final
  48. if ( $url !~ /\/$/ ) {
  49. # lo añadimos
  50. $url = $url . "/";
  51. }
  52.  
  53. # abrimos la lista de users-agents
  54. open  $FILE, '<', $file or die $!;
  55. @archivos = <$FILE>;
  56.  
  57. $ua = LWP::UserAgent->new;    
  58.  
  59. for  $archivo(@archivos){
  60.     chomp $archivo;  
  61. $ua->agent("$archivo");
  62. $req = HTTP::Request->new(GET => $url);
  63. $response = $ua->request($req);
  64. $content = $response->content();
  65. open (F,">>", "$archivo.html")or die "Couldn't open: $!";
  66. print F $content;
  67. close (F)
  68. }
  69.  
Coloreado en 0.011 segundos, usando GeSHi 1.0.8.4


Ejecución:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
tux@tux:/tmp$ perl cambiar-user-agent.pl localhost user-agents.txt
Couldn't open: No existe el fichero o el directorio at cambiar-user-agent.pl line 65, <$FILE> line 5.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Contenido del archivo user-agents.txt
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
curl
wget
BlackBerry
Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, Like Gecko) Version/6.0.0.141 Mobile Safari/534.1+
Mobile
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Cómo puedo solucionar mi problema?

Saludos.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Publicidad

Re: HTTP::Request/LWP::UserAgent

Notapor explorer » 2011-03-14 12:39 @569

Es muy posible que el error esté en las barras inclinadas ('/') que aparecen en los nombres de agente, haciéndole creer al open() de que se tratan de nombres de directorios, en lugar de formar todos juntos el nombre de un fichero.

Una forma obvia de resolverlo sería eliminar los caracteres extraños, pero si lo que se quiere es crear ficheros con la máxima semejanza a los nombres de agente de usuario, lo que podemos hacer es "escapar" el significado de esos caracteres.

Una forma rápida de probarlo sería con:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open (F,">>", "\Q$archivo\E.html") or die "Couldn't open: $!";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

La secuencia de escape "\Q" hace un escapado de todos los caracteres que no son "caracteres de palabra", hasta la secuencia de escape "\E" o el final de la cadena.

Más información en perldoc perlop, sección Quote and Quote-like Operators.
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: HTTP::Request/LWP::UserAgent

Notapor situ » 2011-03-14 12:48 @575

Voy a leer la ayuda, gracias.
Con el cambio que me recomendaste me sigue diciendo lo mismo.
Saludos.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: HTTP::Request/LWP::UserAgent

Notapor explorer » 2011-03-14 13:25 @601

El error dice que está al leer la quinta línea del fichero de nombres de agente... ¿qué agente ha leído?

Pinta el valor de "$archivo" a pantalla, para que veas cuál es el que provoca el fallo. Hazlo con un print "[$archivo]\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: HTTP::Request/LWP::UserAgent

Notapor situ » 2011-03-14 15:09 @672

Llega hasta acá
[curl]
[wget]
[BlackBerry]
[Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, Like Gecko) Version/6.0.0.141 Mobile Safari/534.1+]
Couldn't open: No existe el fichero o el directorio at cambiar-user-agent.pl line 66, <$FILE> line 5.


Digamos que falta el user-agent "mobile", ya que mi archivo tiene los siguientes UA definidos:

curl
wget
BlackBerry
Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, Like Gecko) Version/6.0.0.141 Mobile Safari/534.1+
Mobile


Saludos.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: HTTP::Request/LWP::UserAgent

Notapor explorer » 2011-03-14 15:32 @689

El problema sigue estando en los caracteres '/'.

Estoy casi seguro que hay una manera de escaparlos, pero depende del sistema operativo que tengas instalado.

Yo cambiaría los caracteres '/' por un '_' con una expresión regular:

$archivo =~ s{/}{_}g;

antes de escapar el resto de caracteres:

$archivo = "\Q$archivo";
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: HTTP::Request/LWP::UserAgent

Notapor situ » 2011-03-14 15:35 @691

Como siempre, un lujo =) Muchas gracias.
Saludos.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114


Volver a Módulos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados