Lwp request linux что это
Перейти к содержимому

Lwp request linux что это

  • автор:

Lwp request linux что это

This program can be used to send requests to WWW servers and your local file system. The request content for POST and PUT methods is read from stdin. The content of the response is printed on stdout. Error messages are printed on stderr. The program returns a status value indicating the number of URLs that failed.

The options are: -m Set which method to use for the request. If this option is not used, then the method is derived from the name of the program. -f Force request through, even if the program believes that the method is illegal. The server might reject the request eventually. -b This URI will be used as the base URI for resolving all relative URIs given as argument. -t Set the timeout value for the requests. The timeout is the amount of time that the program will wait for a response from the remote server before it fails. The default unit for the timeout value is seconds. You might append «m» or «h» to the timeout value to make it minutes or hours, respectively. The default timeout is ‘3m’, i.e. 3 minutes. -i Set the If-Modified-Since header in the request. If time is the name of a file, use the modification timestamp for this file. If time is not a file, it is parsed as a literal date. Take a look at HTTP::Date for recognized formats. -c Set the Content-Type for the request. This option is only allowed for requests that take a content, i.e. POST and PUT . You can force methods to take content by using the «-f» option together with «-c» . The default Content-Type for POST is «application/x-www-form-urlencoded» . The default Content-type for the others is «text/plain» . -p Set the proxy to be used for the requests. The program also loads proxy settings from the environment. You can disable this with the «-P» option. -H Send this HTTP header with each request. You can specify several, e.g.:

lwp-request \ -H 'Referer: http://other.url/' \ -H 'Host: somehost' \ http://this.url/ 

-C : Provide credentials for documents that are protected by Basic Authentication. If the document is protected and you did not specify the username and password with this option, then you will be prompted to provide these values.

The following options controls what is displayed by the program: -u Print request method and absolute URL as requests are made. -U Print request headers in addition to request method and absolute URL . -s Print response status code. This option is always on for HEAD requests. -S Print response status chain. This shows redirect and authorization requests that are handled by the library. -e Print response headers. This option is always on for HEAD requests. -d Do not print the content of the response. -o Process HTML content in various ways before printing it. If the content type of the response is not HTML , then this option has no effect. The legal format values are; text , ps , links , html and dump .

If you specify the text format then the HTML will be formatted as plain latin1 text. If you specify the ps format then it will be formatted as Postscript.

The links format will output all links found in the HTML document. Relative links will be expanded to absolute ones.

The html format will reformat the HTML code and the dump format will just dump the HTML syntax tree.

Note that the «HTML-Tree» distribution needs to be installed for this option to work. In addition the «HTML-Format» distribution needs to be installed for -o text or -o ps to work. -v Print the version number of the program and quit. -h Print usage message and quit. -x Extra debugging output. -a Set text(ascii) mode for content input and output. If this option is not used, content input and output is done in binary mode.

Because this program is implemented using the LWP library, it will only support the protocols that LWP supports.

SEE ALSO

lwp-mirror, LWP

COPYRIGHT

Copyright 1995-1999 Gisle Aas.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

Rootkitы в ubuntu mate

Просканировал систему (rkhunter) и обнаружил вирус(rootkit),вот хочу узнать можно удалить или придется переустанавливать систему, и если можно то как?

Kormchiy
22.08.18 22:01:49 MSK

Сначала погугли по хэшу. Возможно это ложная тревога.

Deleted
( 22.08.18 22:03:35 MSK )

Самый простой метод — переустановка системы при наличии хорошего backupa.

anonymous
( 16.09.18 07:26:21 MSK )

У rkhunter достаточно много ложных срабатываний. Так что сперва мозг включи. Хотя да если ставил ненужное непонятно с левых ресусов или сборочки васянов то ну ты понил да?

init_6 ★★★★★
( 16.09.18 07:32:04 MSK )
Ответ на: комментарий от init_6 16.09.18 07:32:04 MSK

У rkhunter достаточно много ложных срабатываний.

У светофора на дороге много ложных срабатываний.

anonymous
( 16.09.18 12:00:39 MSK )
Ответ на: комментарий от anonymous 16.09.18 12:00:39 MSK

Ты будешь смеяться но да. Если светофор и остальное оборудование на железке плохо обслуживать, то оно будет врать. Обычно делают чтобы красный загорался в случае неисправностей, т.к. от зеленого проблем больше. А ломается по многим причинам. От отвалившегося провода до подгорания контактов на реле (да, на РЖД и в Метро не осилили транзисторы, только в качестве экспериментов разве что).

peregrine ★★★★★
( 16.09.18 12:44:57 MSK )

На убунте он на инит ругается обычно, и если это единственное срабатывание — можно игнорировать, наверное (если нет других симптомов).

anonymous
( 16.09.18 13:12:08 MSK )
Ответ на: комментарий от anonymous 16.09.18 13:12:08 MSK

можно игнорировать, наверное (если нет других симптомов).

Как и красный сигнал светофора. Ежели вы так хотите, кто же вам запретит-то.

anonymous
( 17.09.18 21:01:20 MSK )

просканировал от нечего делать и о ужас

/usr/bin/egrep [ Warning ] /usr/bin/fgrep [ Warning ] /usr/bin/ldd [ Warning ] Checking for suspicious (large) shared memory segments [ Warning ] Checking for passwd file changes [ Warning ] Checking for group file changes [ Warning ] Checking for hidden files and directories [ Warning ] System checks summary ===================== File properties checks. Files checked: 120 Suspect files: 3 Rootkit checks. Rootkits checked : 406 Possible rootkits: 1 Applications checks. Applications checked: 2 Suspect applications: 0

пойду посмотрю что на других машинах

amd_amd ★★★★★
( 17.09.18 22:12:44 MSK )
Последнее исправление: amd_amd 17.09.18 22:13:45 MSK (всего исправлений: 1)

Ответ на: комментарий от amd_amd 17.09.18 22:12:44 MSK

Хотел тоже посканировать на поржать, так он на NixOS даже не опакечен. И на что я рассчитывал.

t184256 ★★★★★
( 17.09.18 22:30:38 MSK )
Ответ на: комментарий от t184256 17.09.18 22:30:38 MSK

tar xfz rkhunter-1.4.6.tar.gz cd rkhunter-1.4.6 sh installer.sh --layout default --install

amd_amd ★★★★★
( 17.09.18 23:07:16 MSK )
Ответ на: комментарий от amd_amd 17.09.18 23:07:16 MSK

t184256 ★★★★★
( 17.09.18 23:09:08 MSK )

на остальных машинах чисто — только подозрительные, а вот на первой есть один — буду разбираться на что ругается

amd_amd ★★★★★
( 17.09.18 23:10:08 MSK )

залей на virustotal.com и посмотри что скажет

Команда lwp-request: опции, ключи и примеры использования

Общие команды – Общие команды, присущие различным операционным системам.

lwp-request

Simple command-line HTTP client. Built with libwww-perl.

  • Make a simple GET request:
  • Upload a file with a POST request:
  • Make a request with a custom user agent:
  • Make a request with HTTP authentication:
  • Make a request and print request headers:
  • Make a request and print response headers and status chain:

Изображение Выучи 10 хороших привычек для работы в UNIX от IBM

Примеры кода, демонстрирующие общие подходы в программировании или же решающие небольшие прикладные задачи. Языки программирования и библиотеки, позволяющие эффективно решать задачи разработки. Объектно-ориентированное программирование, функциональное программирование и прочие подходы и …

Фото Код

Трюки Bash

Полезные заметки по работе с командной строкой: bash и прочие *sh. Однострочники, скрипты, позволяющие решать большие и малые задачи администрирования и настройки Юникс систем. Zsh для современного MacOS, Bash для …

Фото Трюки Bash

Заметки о настройке различных IT-штуковин. Настройка, допиливание, полировка. Конфигурируем приложения и тюнингуем сервера. Полезные параметры и ключи запуска программ. Увеличиваем скорость, уменьшаем отклик, ускоряем работу и улучшаем результаты работы. Объясняем …

Фото Настройки

Терминал/Консоль

Команды и инструкции терминала (консоли) Linux, MacOS, Windows и прочих операционных систем. Трюки и особенности командных оболочек, скрипты для администрирования Unix. Программирование и скриптование Windows и Linux, тонкая настройка Macos. …

Фото Терминал/Консоль

Также может быть вам интересно:

  • Как получить дерево директорий на Bash одним однострочником
  • Python: Функции
  • Python: Встроенные типы данных (list, set, dict, etc)
  • Python: типы данных, переменные, логическое ветвление и циклы
  • Как сделать свою middleware в Django (с примерами)

Свежее на «Цифре»
MessageId или как дебажить систему с минимумом проблем
Программы, 50 дней назад
Проверочный список для выпуска промышленных приложений с иллюстрациями
Работа и управление, 91 день назад
В Google Pixel и Windows Snipping Tool есть возможность восстановления обрезанных изображений
Новости, 23.03.2023
Два подарка «под ёлочку» от Heroes of Might and Magic
Новости, 25.12.2022
Вышел Pulsar – редактор кода на основе Atom
Новости, 25.12.2022
Ленивый backup PostgreSQL
Программы, 17.12.2022
Google анонсировала OSV-Scanner: сканер уязвимостей в программных проектах
Новости, 16.12.2022

Фото Gitea запускает коммерческую версию, а недовольные – форк Forĝejo

Gitea запускает коммерческую версию, а недовольные – форк Forĝejo

На днях группа бывших разработчиков Gitea решили создать на базе хостинга кода Gitea свою версию проекта – «Forgejo». Причиной тому …

Фото Пользователи и их создание в Django - своя регистрация на сайте

Пользователи и их создание в Django — своя регистрация на сайте

Если вашим сайтом должны активно пользоваться несколько человек, то полезно их различать, а значит — надо уметь создавать пользователей, либо …

Фото Новый синтаксис старой команды with в Python 3.10

Новый синтаксис старой команды with в Python 3.10

Как же долго моё чувство прекрасного страдало… Но в Python 3.10 появился новый парсер синтаксических конструкций Python!

Фото Добавляем постраничную пагинацию на Django сайт

Добавляем постраничную пагинацию на Django сайт

На сайтах часто встречаются многостраничные объекты: список товаров, список заметок и т.д. Поэтому важно уметь добавить навигацию по страницам на …

Фото Новый оператор match-case в Python

Новый оператор match-case в Python

В новой версии Python (3.10) появится новый оператор. Новый оператор сопоставления по шаблону (match-case).

Фото Нет слов, одни. однострочники

Нет слов, одни. однострочники

На днях вышел пост со списком полезных однострочников для JavaScript программистов. Памятуя Perl-овую молодость, заглянул туда.

Фото Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

В Django вы можете передавать данные в шаблоны посредством контекстов. Контекст передаётся из контроллера (view в терминах Django), однако, если …

Фото Пример своей консольной команды в Django проекте

Пример своей консольной команды в Django проекте

Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать …

Фото Разграничение прав доступа на Django сайте

Разграничение прав доступа на Django сайте

Почти на любом веб-сайте необходимо разделять пользователей на группы и предоставлять им разные возможности. В Django есть довольно серьёзная система …

Web Основы с LWP

LWP (сокращение от «Library for WWW in Perl») это очень популярная группа модулей языка Perl для доступа к данным в сети Internet. Как и большинство модулей языка Perl, на каждый модуль из состава LWP присутствует документация с полным описанием его интерфейса. Однако, в LWP есть множество модулей, для которых довольно сложно найти документацию по, казалось бы, простейшим вещам.

Введение в использование LWP, очевидно, должно занять целую книгу, — книгу, которая только вышла из печати, и названную: Perl & LWP. Эта статья предлагает Вам несколько примеров, которые помогут Вам в организации обычных вещей с LWP.

Доступ к страничкам с помощью LWP::Simple

Если Вы всего лишь хотите получить документ, находящийся по определённому адресу(URL), то самый простой способ сделать это — использовать функции модуля LWP::Simple .

В Perl-скрипте Вы можете сделать это, вызвав функцию get($url) . Она попытается вытянуть содержимое этого URL. Если всё отработает нормально, то функция вернёт это содержимое; но если произойдёт какая-нибудь ошибка, то она вернёт undef .

 my $url = 'http://freshair.npr.org/dayFA.cfm?todayDate=current'; # Всего лишь для примера: новые записи на /Fresh Air/ use LWP::Simple; my $content = get $url; die "Couldn't get $url" unless defined $content; # Далее что-нибудь делаем с $content, например: if($content =~ m/jazz/i) < print "They're talking about jazz today on Fresh Air!\n"; >else

Более удобный вариант функции get — это getprint , который удобен для простмотра содаржимого страниц через Perl. Если функция getprint может «достать» страничку, адрес которой Вы задали, то она отправляет содержимое в STDOUT ; в противном случае, в роли жалобной книги выступает STDERR .

 % perl -MLWP::Simple -e "getprint 'http://cpan.org/RECENT'" 

Это URL простого текстового файла. В нём содержится список новых файлов на CPAN за последние две недели. Вы легко можете сделать shell-команду, которая, например, будет высылать Вам список новых модулей Acme:: :

 % perl -MLWP::Simple -e "getprint 'http://cpan.org/RECENT'" \ | grep "/by-module/Acme" | mail -s "New Acme modules! Joy!" $USER 

В модуле LWP::Simple существует ещё несколько довольно полезных функций, включая функцию для выполнения HEAD -запроса для URL (полезна для проверки ссылок или получения даты последней корректировки документа) и две функции для сохранения и зеркалирования URL в локальный файл. Смотрите документацию по LWP::Simple для более детальной информации, или Главу 2, «Web Основ» Perl & LWP для большего количества примеров.

Основы классовой модели LWP

Функции LWP::Simple удобны только для простых случаев, но эти функции не поддерживают теневых посылок(далее cookies) и проверки подлинности(далее authorization); Они также не позволяют устанавливать какие-либо параметры HTTP запроса; и главное, они не позволяют считывать строки заголовка в HTTP ответе (особенно полный текст сообщения в случае HTTP ошибки( HTTP error message)). Для доступа ко всем этим возможностям, Вы должны использовать весь набор классов LWP.

LWP содержит множество классов, но главные два, которые Вы должны понимать — это LWP::UserAgent и HTTP::Response . LWP::UserAgent это класс для «виртуальных броузеров», кторыми Вы будете пользоваться для выполнения запросов. HTTP::Response это класс для ответов (или сообщений об ошибке), которые Вы получаете обратно, после запроса.

Основное выражение при работе с LWP: $response = $browser->get($url) , или полностью:

 use LWP 5.64; # Загружаем все нужные LWP классы, и удостовериваемся # в достаточной свежести версии модуля. my $browser = LWP::UserAgent->new; . # Используется ниже, тот URL, которому и будет сделан запрос: my $url = 'http://freshair.npr.org/dayFA.cfm?todayDate=current'; my $response = $browser->get( $url ); die "Can't get $url -- ", $response->status_line unless $response->is_success; die "Hey, I was expecting HTML, not ", $response->content_type unless $response->content_type eq 'text/html'; # или другой content-type, который Вам подходит # В противном случае, производим обработку содержимого: if($response->content =~ m/jazz/i) < print "They're talking about jazz today on Fresh Air!\n"; >else
  • Status code(Код состояния), который показывает успех либо неудачу запроса (Вы это можете проверить так: $response->is_success ).
  • HTTP status line(строка состояния), которая, я думаю, будет довольна информативна в случае ошибки (её Вы можете увидеть, используя $response->status_line , она возвращает что-то вроде: «404 Not Found»).
  • MIME content-type, например «text/html», «image/gif», «application/xml», и т.д., который Вы можете увидеть, используя $response->content_type
  • Собственно содержимое запрашиваемого документа в $response->content . В случае с HTML, здесь будет HTML код; если — GIF, то $response->content вернёт бинарные данные GIF.
  • А также множество удобных и более специфических, которые описаны в документации по HTTP::Response , и его суперклассам, HTTP::Message и HTTP::Headers .

Добавление других заголовков HTTP запроса

Вот наиболее часто используемый синтаксис для запросов $response = $browser->get($url) , но, честно говоря, Вы можете добавлять собственные строки HTTP заголовков к запросу, добавлением списка пар ключ-значение после URL, например:

 $response = $browser->get( $url, $key1, $value1, $key2, $value2, . ); 

Вот как отправить Netscape-подобные заголовки:

 my @ns_headers = ( 'User-Agent' => 'Mozilla/4.76 [en] (Win98; U)', 'Accept' => 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*', 'Accept-Charset' => 'iso-8859-1,*,utf-8', 'Accept-Language' => 'en-US', ); . $response = $browser->get($url, @ns_headers); 

Если Вы не будете использовать этот массив в дальнейшем, Вы можете поступить следующим образом:

 $response = $browser->get($url, 'User-Agent' => 'Mozilla/4.76 [en] (Win98; U)', 'Accept' => 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*', 'Accept-Charset' => 'iso-8859-1,*,utf-8', 'Accept-Language' => 'en-US', ); 

Если Вы собираетесь изменить только ‘User-Agent’-параметры, Вы можете изменить стандартную установку объекта $browser «libwww-perl/5.65» (или что-то подобное) на всё что Вы хотите, используя соответствующий метод объекта LWP::UserAgent :

 $browser->agent('Mozilla/4.76 [en] (Win98; U)'); 

Включение Cookies(Теневых посылок)

Обычно объект LWP::UserAgent работает как броузер с отключённой поддержкой cookies. Существует несколько путей для того, чтобы включить такую поддержку, используя метод cookie_jar . «cookie jar» — это объект, который, если можно так сказать, олицетворяет собой маленькую БД со всеми HTTP cookies, о которых может знать броузер. «БД» может быть сохранена на диск (так работает Netscape, используя файл cookies.txt), или «висеть» в памяти, при этом весь набор cookies будет потерян, как только программа завершит свою работу.

Для того, чтобы создать пустой объект cookie jar в памяти, вызовите cookie_jar метод следующим образом:

 $browser->cookie_jar(<>); 

Для того, чтобы делать копии cookies в файл на диске, который будет содержать весь набор cookies, с которыми работал броузер, после завершения программы, вызовите cookie_jar метод следующим образом:

 use HTTP::Cookies; $browser->cookie_jar( HTTP::Cookies->new( 'file' => '/some/where/cookies.lwp', #файл обмена 'autosave' => 1, #по завершении, сохранять ли файл )); 

Этот файл будет в специфическом формате LWP. Если Вы хотите получить доступ к cookies из вашего Netscape-cookies файла, Вы можете использовать следующий метод: HTTP::Cookies::Netscape :

 use HTTP::Cookies; $browser->cookie_jar( HTTP::Cookies::Netscape->new( 'file' => 'c:/Program Files/Netscape/Users/DIR-NAME-HERE/cookies.txt', # откуда читать куки )); 

Вы можете добавить строку ‘autosave’ => 1 , как мы делали ранее, но в момент записи существует вероятность того, что Netscape может отказать в записи некоторых cookies обратно на диск.

Отправка данных форм методом POST

Многие HTML формы отправляют данные на сервер, используя запрос HTTP POST, который вы можете осуществить следующим образом:

 $response = $browser->post( $url, [ formkey1 => value1, formkey2 => value2, . ], ); 

Или, если Вам нужно посылать HTTP заголовки:

 $response = $browser->post( $url, [ formkey1 => value1, formkey2 => value2, . ], headerkey1 => value1, headerkey2 => value2, ); 

Например, следующая программа осуществляет поисковый запрос на AltaVista (отправкой некоторых данных форм, используя метод HTTP POST), и извлекает из теста ответа количество совпадений:

 use strict; use warnings; use LWP 5.64; my $browser = LWP::UserAgent->new; my $word = 'tarragon'; my $url = 'http://www.altavista.com/sites/search/web'; my $response = $browser->post( $url, [ 'q' => $word, #поисковая фраза 'pg' => 'q', 'avkw' => 'tgz', 'kl' => 'XX', ] ); die "$url error: ", $response->status_line unless $response->is_success; die "Weird content type at $url -- ", $response->content_type unless $response->content_type eq 'text/html'; if( $response->content =~ m ) < #Подстрока будет вида: "AltaVista found 2,345 results" print "$word: $1\n"; >else

Передача данных форм методом GET

Некоторые HTML формы передают данные не отправкой методом POST, а совершением обыкновенного GET запроса с определённым набором данных в конце URL. Например, если Вы пойдёте на imdb.com и запустите поиск по фразе Blade Runner, то URL, который Вы увидите, будет следующим:

 http://us.imdb.com/Tsearch?title=Blade%20Runner&restrict=Movies+and+TV 

Для запуска такого поиска при помощи LWP, надо сделать следующее:

 use URI; my $url = URI->new( 'http://us.imdb.com/Tsearch' ); # создаёт объект, представляющий URL $url->query_form( # Здесь пары ключ => значение: 'title' => 'Blade Runner', 'restrict' => 'Movies and TV', ); my $response = $browser->get($url); 

Смотрите Главу 2, «Формы» книги Perl & LWP для более подробного изучения HTML форм, также как и главы с шестой по девятую для подробного изучения извлечения данных из HTML.

Преобразование относительных в абсолютые ссылки

URI класс, который мы рассмотрели только что, предоставляет множество всевозможных функций для работы с различными частями URL (такие как определение типа URL — $url->scheme , определение на какой хост он ссылается — $url->host , , и так далее на основании документации по классам URI. Тем не менее, наиболее интересными являются метод query_form , рассмотренный ранее, и теперь метод new_abs для преобразования относительной ссылки(«../foo.html») в абсолютную(«http://www.perl.com/stuff/foo.html»):

 use URI; $abs = URI->new_abs($maybe_relative, $base); 

Например, рассмотрим эту программку, которая выбирает ссылки из HTML-странички сновыми модулями на CPAN:

 use strict; use warnings; use LWP 5.64; my $browser = LWP::UserAgent->new; my $url = 'http://www.cpan.org/RECENT.html'; my $response = $browser->get($url); die "Can't get $url -- ", $response->status_line unless $response->is_success; my $html = $response->content; while( $html =~ m/

При запуске она начинает выдавать что-то вроде этого:

 MIRRORING.FROM RECENT RECENT.html authors/00whois.html authors/01mailrc.txt.gz authors/id/A/AA/AASSAD/CHECKSUMS . 

Но, если Вы хотите получить список абсолютных ссылок Вы можете использовать метод new_abs , изменив цикл while следующим образом:

 while( $html =~ m/new_abs( $1, $response->base ) ,"\n"; > 

( $response->base модуля HTTP::Message используется для определения базового адреса для преобразования относительных ссылок в абсолютные.)

Теперь наша программа выдаёт то, что ндо:

 http://www.cpan.org/MIRRORING.FROM http://www.cpan.org/RECENT http://www.cpan.org/RECENT.html http://www.cpan.org/authors/00whois.html http://www.cpan.org/authors/01mailrc.txt.gz http://www.cpan.org/authors/id/A/AA/AASSAD/CHECKSUMS . 

См. Главу 4, "URLs", книги Perl & LWP для большей информации об объектах URI.

Конечно, использование regexp для выделения адресов является слишком прмитивным методом, поэтому для более серьёзных программ следует использовать модули "грамматического разбора HTML" подобные HTML::LinkExtor или HTML::TokeParser , или, даже может быть, HTML::TreeBuilder .

Другие свойства броузера

Объекты LWP::UserAgent имеют множество свойст для управления собственной работой.Вот некоторые из них:

  • $browser->timeout(15) : Этот метод устанавливает максимальное количество времени на ожидание ответа сервера. Если по истечении 15 секунд(в данном случае) не будет получено ответа, то броузер прекратит запрос.
  • $browser->protocols_allowed( [ 'http', 'gopher'] ) : Устанавливаются типы ссылок, с которыми броузер будет "общаться"., в частности HTTP and gopher. Если будет осуществена попытка получить доступ к какому-то документу по другому протоколу (например, "ftp:", "mailto:", "news:"), то не будет даже попытки соединения, а мы получим ошибку 500, с сообщением подобным: "Access to ftp URIs has been disabled".
  • use LWP::ConnCache;
    $browser->conn_cache(LWP::ConnCache->new()) : После этой установки объект броузера пытается использовать HTTP/1.1 "Keep-Alive", который ускоряет запросы путем использования одного соединения для нескольких запросов к одному и тому же серверу.
  • $browser->agent( 'SomeName/1.23 (more info here maybe)' ) : Определяем как наш броузер будет идентифицировать себя в строке "User-Agent" HTTP запросов. По умолчанию, он отсылает"libwww-perl/versionnumber", т.е. "libwww-perl/5.65". Вы можете изменить это на более информативное сообщение:

 $browser->agent( 'SomeName/3.14 (contact@robotplexus.int)' ); 

Или, если необходимо, Вы можете прикинутся реальным броузером:

 $browser->agent( 'Mozilla/4.0 (compatible; MSIE 5.12; Mac_PowerPC)' ); 

Написание учтивых роботов

Если Вы хотите убедится, что Ваша программа, основанная на LWP, обращает внимание на файлы robots.txt и не делает слишком много запросов за короткий период времени Вы можете использовать LWP::RobotUA вместо LWP::UserAgent .

LWP::RobotUA - это почти LWP::UserAgent , и Вы можете использовать его также:

 use LWP::RobotUA; my $browser = LWP::RobotUA->new( 'YourSuperBot/1.34', 'you@yoursite.com'); # Your bot's name and your email address my $response = $browser->get($url); 

Но HTTP::RobotUA добавляет следующие возможности:

    Если robots.txt на сервере, на который ссылается $url , запрещает Вам доступ к $url , то тогда объект $browser (учтите, что он принадлежит классу LWP::RobotUA ) не будет запрашивать его, и мы получим в ответ ( $response ) ошибку 403, содержащую строку "Forbidden by robots.txt". Итак, если Вы имеете следующую строчку:

 die "$url -- ", $response->status_line, "\nAborted" unless $response->is_success; 

тогда программа должна завершится сообщением:

 http://whatever.site.int/pith/x.html -- 403 Forbidden by robots.txt Aborted at whateverprogram.pl line 1234 
 $browser->delay( 7/60 ); 

Использование прокси-серверов

В некоторых случаях Вы хотите или Вам необходимо использовать прокси-сервера для доступа к определённым сайтам или для использования определённого протокола. Наиболее часто такая необходимость возникает, когда Ваша LWP-программа запускается на машине, которая находится "за firewallом".

Для того, чтобы броузер использовл прокси, который определён в переменных окружения( HTTP_PROXY ), вызовите env_proxy перед какими-то запросами. В частности:

 use LWP::UserAgent; my $browser = LWP::UserAgent->new; #И перед первым запросом: $browser->env_proxy; 

Для большей информации о параметрах прокси читайте документацию по LWP::UserAgent, в частности обратите внимание на методы proxy , env_proxy и no_proxy .

HTTP Authentication(идентификация)

Многие сайты ограничивают доступ к своим страницам используя "HTTP Authentication". Это не просто форма, куда Вы должны ввести свой пароль для доступа к информации, это особый механизм, когда HTTP серверпосылает броузеру сообщение, которое гласит: "That document is part of a protected 'realm', and you can access it only if you re-request it and add some special authorization headers to your request"("Этот документ является частью защищённой 'области' и Вы можете получить доступ к нему, если Вы ещё раз сделаете запрос, добавив некоторые специфичные заголовки к Вашему запросу").

Например, администраторы сайта Unicode.org ограничивают доступ для программ сбора emailов к их архивам электронных рассылок, защищая их при помощи HTTP Authentication, существует общий логин и пароль для доступа(на http://www.unicode.org/mail-arch/)--логин - "unicode-ml" и пароль - "unicode".

Например, рассмотрим этот URL, который является частью защищённой области Веб-сайта:

 http://www.unicode.org/mail-arch/unicode-ml/y2002-m08/0067.html 

Ели Вы попытаетесь загрузить эту страничку броузером, то получите инструкцию: "Enter username and password for 'Unicode-MailList-Archives' at server 'www.unicode.org'", или в графическом броузере что-то наподобие этого:

В LWP, если Вы запустите следующее:

 use LWP 5.64; my $browser = LWP::UserAgent->new; my $url = 'http://www.unicode.org/mail-arch/unicode-ml/y2002-m08/0067.html'; my $response = $browser->get($url); die "Error: ", $response->header('WWW-Authenticate') || 'Error accessing', # ('WWW-Authenticate' is the realm-name) "\n ", $response->status_line, "\n at $url\n Aborting" unless $response->is_success; 

То тогда получите ошибку:

 Error: Basic realm="Unicode-MailList-Archives" 401 Authorization Required at http://www.unicode.org/mail-arch/unicode-ml/y2002-m08/0067.html Aborting at auth1.pl line 9. [or wherever] 

потому что $browser не знает логина и пароля для области ("Unicode-MailList-Archives") на хосте("www.unicode.org"). Наипростейший метод дать узнать броузеру логин и пароль - использовать метод credentials . Синтаксис следующий:

 $browser->credentials( 'servername:portnumber', 'realm-name', 'username' => 'password' ); 

В большинстве случаев порт номер 80 - является TCP/IP портом по умолчанию для HTTP; и Вы можете использовать метод credentials до каких-либо запросов. Например:

 $browser->credentials( 'reports.mybazouki.com:80', 'web_server_usage_reports', 'plinky' => 'banjo123' ); 

Итак, если мы добавим следующее сразу после строки $browser = LWP::UserAgent->new; :

 $browser->credentials( # add this to our $browser 's "key ring" 'www.unicode.org:80', 'Unicode-MailList-Archives', 'unicode-ml' => 'unicode' ); 

и запустим, то запрос пройдёт.

Accessing HTTPS URLs

Когда Вы хотите получить доступ к странице через HTTPS, то всё будет работать как и в случае, если бы мы имели дело с обыкновенным HTTP протоколом, если Ваш LWP имеет поддержку HTTPS (через соответствующую Secure Sockets Layer library). Например:

 use LWP 5.64; my $url = 'https://www.paypal.com/'; # Yes, HTTPS! my $browser = LWP::UserAgent->new; my $response = $browser->get($url); die "Error at $url\n ", $response->status_line, "\n Aborting" unless $response->is_success; print "Whee, it worked! I got that ", $response->content_type, " document!\n"; 

Если Ваш LWP не имеет поддержки HTTPS, тогда ответ будет не удачным и Вы получите следующую ошибку:

 Error at https://www.paypal.com/ 501 Protocol scheme 'https' is not supported Aborting at paypal.pl line 7. [or whatever program and line] 

Если Ваш LWP имеет поддержку HTTPS, тогда ответ должен быть удачным, и Вы должны отработать с $response как и с клюбым обыкновенным HTTP-ответом.

Для получения информации по установке поддержки HTTPS для LWP прочитайте файл README.SSL, который входит в дистрибутив libwww-perl.

Получение больших документов

Когда Вы запрашиваете большой(или потенциально большой) документ, возникает проблема со стандартными действиями с методами запросов (подобно $response = $browser->get($url) ) с тем, что весь объект ответа должен храниться в памяти. Если ответом является 30-мегабайтный файл, то это, мягко говоря, не очень хорошо для Вашей оперативной памяти и размером Вашего процесса в ней.

Хорошей альтернативой является сохранение файла на диск, а не в память. Синтаксис следующий:

 $response = $ua->get($url, ':content_file' => $filespec, ); 
 $response = $ua->get('http://search.cpan.org/', ':content_file' => '/tmp/sco.html' ); 

Когда Вы используете опцию :content_file , объект $response будет иметь все нормальные заголовки, однако $response->content будет пустым.

Отмечу, что опция ":content_file" не поддерживалась старыми версиями LWP, поэтому Вы должны принять это во внимание, добавив use LWP 5.66; для проверки версии LWP, если Вы считаете, что Ваша программа может быть запущена на системах с более старыми версиями LWP.

Если Вы хотите, чтобы программа была совместима с более старыми версиями LWP, тогда используйте синтаксис, который позволяет сделать тоже самое:

 use HTTP::Request::Common; $response = $ua->request( GET($url), $filespec ); 

Ссылки

Помните, что эта статья - это всего лишь самое первое введение в LWP-- для более глубокого изучения LWP и задач, связанных с LWP, Вам стоит прочитать следующие материалы:

  • LWP::Simple : простые функции для скачивание, рабора заговков и зеркалирования адресов.
  • LWP : Обзор модулей libwww-perl.
  • LWP::UserAgent : Класс для объектов, которые исполняют роль "виртуальных броузеров".
  • HTTP::Response : Класс объектов, которые представляют "ответ", такой как в $response = $browser->get(. ) .
  • HTTP::Message и HTTP::Headers : Классы для предоставление большего количества методов для HTTP::Response .
  • URI : Класс для объектов, которые представляют собой абсолютные или относительные URLы.
  • URI::Escape : Функции для работы с escape-последовательностями в адресах (например преобразование туда и обратно из "this & that" в "this%20%26%20that").
  • HTML::Entities : Функции для работы с escape-последовательностями в HTML (например преобразование туда и обратно из "C. & E. Brontë" в "C. & E. Brontë").
  • HTML::TokeParser и HTML::TreeBuilder : Классы для грамматического разбора("парсинга") HTML.
  • HTML::LinkExtor : Класс для нахождения ссылок в документах.
  • И последнее, но не наименьшее, моя книга Perl & LWP.

Copyright ©2002, Sean M. Burke. Translation into Russian by Dmitry Nikolayev.
You can redistribute this document and/or modify it, but only under the same terms as Perl itself.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *