#perl
#perl
Вопрос:
Я использую этот код для чтения содержимого веб-страницы:
my $ua = new LWP::UserAgent;
my $response= $ua->post($url);
if ($response->is_success){
my $content = $response->content;
...
Но если $url указывает на перемещенную страницу, то $response->is_success возвращает false . Теперь, как мне легко получить содержимое перенаправленной страницы?
Ответ №1:
Вам нужно выполнить сам редирект.
if ($response->is_redirect()) {
$url = $response->header('Location');
# goto try_again
}
Возможно, вы захотите поместить это в цикл while и использовать «next» вместо «goto». Вы также можете захотеть зарегистрировать его, ограничить количество перенаправлений, которые вы готовы выполнять, и т.д.
[обновить]
Хорошо, я только что заметил, что есть более простой способ сделать это. Со страницы руководства LWP::UserAgent:
$ua->requests_redirectable $ua->requests_redirectable( @requests ) Это считывает или задает список имен запросов объекта, который "$ua-> redirect_ok(...)" разрешит перенаправление для. По умолчанию, это "['GET', 'HEAD']", согласно RFC 2616. Изменить, чтобы включить 'ОПУБЛИКОВАТЬ', рассмотрим: push @{ $ua->requests_redirectable }, 'ОПУБЛИКОВАТЬ';
Так что да, может быть, просто сделайте это. 🙂
Комментарии:
1. Похоже, запросы GET автоматически перенаправляются внутри. Итак, я делаю так: мой $ agent = LWP::UserAgent-> new(env_proxy => 1,keep_alive => 1, timeout => 30, agent => «Mozilla / 4.76 [en] (Win98; U)»); мой $ header = HTTP::Request ->создать(GET => $link); мой $request = HTTP::Request ->создать(‘GET’, $link, $header); мой $response = $agent-> запрос($request)
2. Да, но в вашем вопросе использовался
POST
, который вам нужно настроить (или обработать) вручную. В любом случае, рад, что у вас получилось.3. Моя ошибка, мне нужно получить доступ только к веб-страницам (GET). Ну, этот общий способ работает как для GET, так и для POST.