Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Módulos » HTTP::Request/LWP::UserAgent Responder al tema
Nuevo tema


Página 1 de 1  [ 7 mensajes ] 
 
Nota 2011-03-14 12:23 @558

Perlero Adicto
Registrado: 2007-04-09 01:44 @114
Mensajes: 264
HTTP::Request/LWP::UserAgent
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.

Syntax: [ Download ] [ Hide ]
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 -> <!-- m --><a class="postlink" href="http://www.domain.com">http://www.domain.com</a><!-- m -->]\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.  


Ejecución:
Syntax: [ Download ] [ Hide ]
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.


Contenido del archivo user-agents.txt
Syntax: [ Download ] [ Hide ]
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
 


¿Cómo puedo solucionar mi problema?

Saludos.


Nota 2011-03-14 12:39 @569
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10260
Re: HTTP::Request/LWP::UserAgent
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:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. open (F,">>", "\Q$archivo\E.html") or die "Couldn't open: $!";

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


Nota 2011-03-14 12:48 @575

Perlero Adicto
Registrado: 2007-04-09 01:44 @114
Mensajes: 264
Re: HTTP::Request/LWP::UserAgent
Voy a leer la ayuda, gracias.
Con el cambio que me recomendaste me sigue diciendo lo mismo.
Saludos.


Nota 2011-03-14 13:25 @601
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10260
Re: HTTP::Request/LWP::UserAgent
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


Nota 2011-03-14 15:09 @672

Perlero Adicto
Registrado: 2007-04-09 01:44 @114
Mensajes: 264
Re: HTTP::Request/LWP::UserAgent
Llega hasta acá
Citar:
[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:

Citar:
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.


Nota 2011-03-14 15:32 @689
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10260
Re: HTTP::Request/LWP::UserAgent
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


Nota 2011-03-14 15:35 @691

Perlero Adicto
Registrado: 2007-04-09 01:44 @114
Mensajes: 264
Re: HTTP::Request/LWP::UserAgent
Como siempre, un lujo =) Muchas gracias.
Saludos.


Responder al tema  [ 7 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO