об'єкт HTTPLIB. Ці запити утворюють діалог з Web-сервером, наслідуючи Web-браузеру.
Діалог починається з побудови серії пропозицій, що визначають спочатку, яку дію ви хочете зробити, а потім идентифицирующее вас для Web-сервера:
import httplib= oreillynet =httplib.HTTP (host) .putrequest ( GET raquo ;, /meerkat /? _ fl=minimal ). putheader ( Host raquo ;, host) .putheader ( User-agent raquo ;, python-httplib ). endheaders ()
Запит GET повідомляє серверу, яку сторінку ви хочете отримати. Тема Host повідомляє йому ім'я запитуваної вами домену. Сучасні сервера, що використовують HTTP 1.1, можуть мати декілька доменів по одному і тому ж адресою. Якщо ви не говорите їм, який домен вам потрібен, в якості коду повернення ви отримаєте код переадресації 302 raquo ;. Тема User-agent повідомляє серверу, до якого типу клієнта ви ставитеся, щоб знати, що він може вам посилати, а що ні. Це вся інформація, необхідна для обробки запиту Web-сервером. Далі запитуємо відповідь:
, returnmsg, headers=h.getreply () returncode == 200: # OK=h.getfile () f.read ()
В результаті цього буде роздрукована поточна сторінка Meerkat в мінімальному вигляді. Тема відгуку і вміст повертаються окремо один від одного, що допомагає як у визначенні та усуненні проблем, так і в розборі даних. Якщо хочемо побачити заголовки відгуку, потрібно використовувати print headers.скривает механіку програмування сокетів, і використання ним файлового об'єкта для буферизації дозволяє застосовувати звичний підхід до маніпуляції даними. HTTPLIB оснащений корисною можливістю налагодження. Доступ до неї отримуємо, викликаючи метод h.set_debuglevel (1) в будь-який момент після ініціалізації об'єкта (рядок h=httplib.HTTP (host) у нашому прикладі). З рівнем налагодження 1, модуль буде дублювати на екран запити і результати будь-яких звернень до getreply (). Забезпечує витончений інтерфейс до функціональності HTTPLIB. Краще всього використовувати його безпосередньо для отримання даних, а не для аналізу Web-сайту. Тут представлено те ж взаємодія, що й вище, але з використанням URLLIB:
urllib=urllib.urlopen ('# justify gt; Одним рядком ви звернулися до Meerkat, отримали дані і помістили їх у тимчасовий кеш. Для доступу до заголовка:
u.headers
І для перегляду всього файлу:
u.read ()
Але це ще не все. На додаток до HTTP, URLLIB може таким же чином звертатися до FTP, Gopher і навіть до локальних файлів. Модуль містить також безліч допоміжних функцій, включаючи ті, що використовуються для розбору url, кодування рядків у url-безпечний формат і забезпечення індикації ходу процесу під час пересилки великого обсягу даних.
1.3 Мережеве програмування в Perl
У Perl використовується стандартний і однаковий для всіх СУБД механізм DBI. Perl спочатку пропонував набагато більш багатий список модулів-розширень, що працює з самими різними бібліотеками, і те, що не так давно з'явилося в PHP, було в Perl вже роки тому. Perl навіть можна використовувати в більш тісної інтеграції з веб-сервером apache як модуль mod_perl, точно також як це робиться для PHP через модуль apache mod_php.cgi-script .pl
Перший і простий скрипт з документації
Створіть файл test.pl наступного вмісту:
strict; CGI; # Or any other CGI :: form handler/decoderCGI :: Ajax; $ cgi=new CGI; $ pjx=new CGI :: Ajax ( exported_func = gt; amp; perl_func); $ pjx- gt; build_html ( $ cgi, amp; Show_HTML); perl_func {$ input=shift;
# do something with $ input $ output=$ input. was the input! raquo ;; ($ output);
} Show_HTML {$ html= lt; lt; EOHTML;
lt; HTML gt;
lt; BODY gt; something:
lt; input type= text name= val1 id= val1 = exported_func ([ val1 ], [ resultdiv ]); gt;
lt; br gt;
lt; div id= resultdiv gt; lt;/div gt;
lt;/BODY gt;
lt;/HTML gt; $ html;
}
Отже: strict; CGI; # Or any other CGI :: form handler/decoderCGI :: Ajax;
Перший рядок встановлює строгий або обмежений режим функціонування скрипта на Perl. У цьому режимі повинно чітко дотримуватися оголошення локальних і глобальних змінних. У принципі, ми могли б і не використовувати такий режим, але часто його використання дозволяє уникнути плутанини, коли змінна з одним і тим же ім'ям починає використовуватися глобально і в будь-якої функції. Друга і третя р...