2010-03-19 22 views
9

Soy nuevo en Perl y quiero escribir un programa en Perl que:¿Cómo puedo usar Perl para enviar y solicitud HTTP con una cookie?

  • crea una petición HTTP
  • lo envía a cualquier URL (por ejemplo http://www.google.com)
  • incluye una cookie en la solicitud
  • registra los códigos de respuesta HTTP en un archivo

he intentado esto:

#!/usr/bin/perl 
require HTTP::Request; 
require LWP::UserAgent; 

$request = HTTP::Request->new(GET => 'http://www.google.com/'); 
$ua = LWP::UserAgent->new; 
$ua->cookie_jar({file => "testcookies.txt",autosave =>1}); 

$response = $ua->request($request); 
if($response->is_success){ 
print "sucess\n"; 
print $response->code; 
} 
else { 
print "fail\n"; 
die $response->code; 
} 

Plstell cómo configurar galleta en 'solicitud' es decir

cómo configurar una cookie cuando enviamos HTTP :: Solicitud

que estaba esperando algo como:

$request = HTTP::Request->new(GET => 'http://www.google.com/'); 
$ua = LWP::UserAgent->new; 
$ua->new CGI::Cookie(-name=>"myCookie",-value=>"fghij"); 

es este ¿¿posible??

+2

¿Has intentado hacerlo tú mismo? ¿A qué te estás atascando? Tampoco estoy seguro de cómo la Putty/finura se relaciona con su pregunta. – Chris

+0

Las cookies se almacenan en el lado del cliente. Tal vez quiera enviar valores de cookies pero no la cookie en sí. – Enrique

+0

+1 'pls dicen cómo configurar cookie en 'solicitud' es un mensaje de error que nunca he visto antes, ni siquiera en Perl :) –

Respuesta

17

como galletas mencionados están en HTTP :: Galletas:

  • Es necesario crear un tarro de galletas

  • Se establece el valor de las cookies para poner en el contenedor

  • A continuación, asocia ese contenedor con su agente de usuario

Por ejemplo:

my $ua = LWP::UserAgent->new; 
my $cookies = HTTP::Cookies->new(); 
$cookies->set_cookie(0,'cookiename', 'value','/','google.com',80,0,0,86400,0); 
$ua->cookie_jar($cookies); 
# Now make your request 

set_cookie tiene un número bastante grande de argumentos:

set_cookie (versión $, llave $, $ val, trayectoria $, $ dominio, $ puerto, $ path_spec, seguro $, $ maxage, $ descarte, \% restante)

Esto se debe a el contenedor de cookies está diseñado desde el punto de vista de un navegador (un UserAgent), en lugar de una única solicitud. Esto significa que no todos los argumentos son tan importantes en este caso.

Lo que necesita para salir bien son $ key, $ val, $ path, $ domain, $ port.

En cuanto al:

500 No se puede conectar a www.google.com:80 (nombre de host Bad 'www.google.com')

Esto significa que LWP puede' t buscar la dirección de Google. ¿Estás detrás de un proxy web?Si es así, también deberá configurar su proxy en la AU utilizando algo como:

$ ua-> proxy (['http', 'https'], 'http://proxyhost.my.domain.com:8080/');

+0

que hace $ cookies-> set_cookie (0, 'cookiename', 'value' , '/', 'google.com', 80,0,0,86400,0); declaración ¿puede explicar detalladamente – dexter

+0

detalles adicionales sobre set_cookie? para obtener más información, consulte la página del manual HTTP :: Cookie o la página de cookies HTTP de Wikipedia. –

3

de inicio con LWP::UserAgent y HTTP::Cookies

+0

LWP :: UserAgent se muestra para la respuesta HTTP Quiero una simple solicitud HTTP con la cookie establecida – dexter

+1

¿Cómo espera registrar el código de estado sin mirar la respuesta? – Quentin

+0

no tenía ninguna pista, gracias de todos modos ... Y qué decir de 'registro de los códigos de respuesta HTTP en un archivo' – dexter

Cuestiones relacionadas