2013-05-20 1 views
2

Я попытался использовать HTTP::Request::Common, чтобы сделать сообщение по URL-адресу. К сожалению, он не работает с аутентификацией, и мне пришлось переключиться обратно на обычный ol 'HTTP::Request. Если бы я не нуждался в подлинности, я мог бы сделать все это дело так:Perl: Использование HTTP :: Request :: Common для публикации с аутентификацией

use HTTP::Request::Common; 

my $browser = LWP::UserAgent->new; 

$browser->request (
    POST $url, 
    Content => [ 
     Name => $name, 
     Address => $address, 
    ], 
); 

К сожалению, из-за проверки подлинности, я должен был возвратиться к HTTP::Request:

use HTTP::Request; 

my $browser = LWP::UserAgent->new; 
my $request = HTTP::Request; 
my $request->authentication_basic($user, $pass); 
my $request->method("POST"); 
my $request->url($url); 

# Create Content Byte String 
my $uri = URI->new('http://'); #URL isn't needed, just the object 
$uri->form_query(Name => $name, Address => $address); 
my $content = $uri->query; 

$request->content($content); 

# Set the headers for the content 
$request->header("Content-Type" => "application/x-www-form-urlencoded"); 
$request->header("Content-Length" => length($content)); 

# Now send your request through your browser 
my $response = $browser->request($request); 

Вы можете увидеть код гораздо более активен. Я хотел бы вернуться к HTTP::Request::Common, потому что код выглядит так, как было бы проще в обслуживании, но как я могу обрабатывать аутентификацию?

ответ

5

POST - всего лишь причудливый конструктор для объекта HTTP::Request. Используйте это для создания объекта запроса и затем установите аутентификацию:

use HTTP::Request::Common; 

my $browser = LWP::UserAgent->new; 
my $request = POST $url, 
    Content => [ 
     Name => $name, 
     Address => $address, 
    ]; 

$request->authorization_basic($user, $pass); 

my $response = $browser->request($request); 
+0

Спасибо. Это намного проще. Perldoc показывает, что вы выполняете 'LWP :: UserAgent-> request' при одновременном создании объекта HTTP :: Request. Да, это имеет смысл, как только вы это указали. Синтаксис бросил меня на петлю. Это не-объектно-ориентированный синтаксис вызова, который действительно является конструктором. Благодарю. Это облегчает чтение моей программы. –

Смежные вопросы