Отправка сообщения на Perl с использованием Net:: HTTP

#perl #post

#perl #Публикация

Вопрос:

Я просматривал документацию для этого, но, похоже, не могу найти ответы на свои вопросы. Я пытаюсь ОТПРАВИТЬ некоторые данные по URL-адресу, используя Net::HTTP в моем скрипте perl. Проблема в том, что мне нужно иметь возможность изменять заголовки (например, добавлять информацию о прокси) для запроса.

У кого-нибудь есть простой пример чего-то подобного?

Ответ №1:

Вы можете сделать запрос POST, используя Net::HTTP , но, как указал икегами, большинство людей используют LWP::UserAgent для такого рода вещей.

 my $http = Net::HTTP->new('Host' => "stackoverflow.com")
    or die "Unable to connect: $@";
$http->write_request('POST' => "/",
    'User-Agent' => "Mozilla/4.0",
    "foo=bar",
);
my ($code, $message, %h) = $http->read_response_headers;
if($code != 200) {
    die "Request failed: $message";
}
my $response;
while(1) {
    my $buf;
    my $n = $http->read_entity_body($buf, 1024);
    die "Read failed: $!" unless defined $n;
    last unless $n;

    $response .= $buf;
}
print "$responsen";
 

Комментарии:

1. Спасибо за простой пример. Если бы я добавил больше заголовков (например, информацию о прокси), вошло бы это в хэш, переданный write_request ?

2. @MaxMackie Да, любые дополнительные заголовки будут идти туда, где находится пользовательский агент (после URL и перед данными).

3. Вы должны использовать HTTP::Request::Common это POST для создания заголовков и полезной нагрузки.

Ответ №2:

Большинство людей отправляют сообщение через Net:: HTTP следующим образом:

 use LWP::UserAgent qw( );

my $ua = LWP::UserAgent->new();
my $response = $ua->post($url, [
   foo => 123,
   bar => 546,
]);
 

Комментарии:

1. К сожалению, я нахожусь в системе, у которой нет доступа к LWP, поэтому мне приходится использовать Net::HTTP более низкого уровня. Я бы установил модуль, если бы мог…