вторник, 28 июня 2011 г.

Поддержка различных HTTP методов

Согласно Wikipedia: “Основой HTTP является технология «клиент-сервер», то есть предполагается существование потребителей (клиентов), которые инициируют соединение и посылают запрос, и поставщиков (серверов), которые ожидают соединения для получения запроса, производят необходимые действия и возвращают обратно сообщение с результатом... Метод HTTP - последовательность из любых символов, кроме управляющих и разделителей, указывающая на основную операцию над ресурсом”. HTTP определяет 9 методов: HEAD, GET, POST, PUT, DELETE, TRACE, OPTIONS,CONNECT и PATH. Процесс UrlFetchGet из поста “Получение данных по URL” поддерживал только один метод - GET. Новый процесс снимает эти ограничения.

Процесс UrlFetch позволяет работать с различными методами. В настоящий момент на практике проверена работа наиболее часто используемых методов GET и POST, а также менее используемого HEAD. В входной поток могут передавать:

- URL, в этом случае все запросы к серверу будут осуществляться с запросом GET.
data  = (
    ‘http://example.com/page/1/’,
    ‘http://example.com/page/2/’,
    ‘http://example.com/page/3/’
)
- параметры запроса в виде списка: URL, метод, данные, заголовки.
data  = (
    (‘http://example.com/page/1/’, ‘GET’),
    (‘http://example.com/page/1/’, ‘GET’, None, { 'User-Agent' : 'Mozilla/5.0 (compatible)' }),
    (‘http://example.com/search’, ‘POST’, {‘s’:’examples’, ‘id’:’1’}),
)
Пример кода
from processes.urlfetch2 import UrlFetch
urlfetch = UrlFetch()
for d in data:
    print d
    urlfetch.io['input'].put(d)
    urlfetch.run_once()
    try:
        (url, status_code, content, info) = urlfetch.io['output'].get()
        print url, status_code, len(content), info
    except:
        pass
    print
Выходной поток не отличаются от своего предшественника UrlFetchGet, на выходе для каждого запроса получаем список из:
  • URL, не обязательно соответствующий входному URL (для случая redirection)
  • STATUS_CODE, результат выполнения, соответствующий одному из HTTP кодов, если значение положительное. И если значение отрицательное, проблема указывается в поле error-msg для INFO. Например, для случая ‘Couldn't resolve host’
  • CONTENT, контент соответствующий входному URL
  • INFO, дополнительная информация возвращенная сервером: Content-type, Cookie, Last-Modified, Server и т.д.

0 комментариев:

Отправить комментарий