Подтвердить что ты не робот

Что делает urllib2.Request(<url>) и как мне его распечатать/просмотреть?

Я пытаюсь узнать, как работает urllib2 и как он инкапсулирует свои различные компоненты перед отправкой фактического запроса или ответа.

До сих пор я:

theurl = "www.example.com"

Это явно указывает URL-адрес для просмотра.

req = urllib2.Request(theurl) 

Не знаю, что это делает, поэтому вопрос.

handle = urllib2.urlopen(req)

Этот получает страницу и выполняет все запросы и ответы.

Итак, мой вопрос: что делает urllib2.Request на самом деле?

Чтобы попытаться взглянуть на него, чтобы получить представление, я попробовал

print req 

и только что получил

<urllib2.Request instance at 0x123456789>

Я также пробовал

print req.read() 

и получил:

Traceback (most recent call last):  
    File "<stdin>", line 1, in ?  
    File "/usr/lib64/python2.4/urllib2.py, line 207, in `__`getattr`__`  
        raise AttributeError, attr  
AttributeError: read

Поэтому я, очевидно, что-то делаю неправильно. Если кто-то может помочь в одном из моих вопросов, это было бы здорово.

4b9b3361

Ответ 1

Класс "Запрос", о котором вы спрашиваете: http://docs.python.org/library/urllib2.html#urllib2.Request

класс urllib2.Request(url [, data] [, заголовки] [, origin_req_host] [, непроверяемый])

Этот класс является абстракцией URL-адреса запрос.

Функция, которую вы действительно хотите сделать запросом (который может принять объект Request или обернуть один вокруг строки URL, которую вы предоставляете), построив объект Request): http://docs.python.org/library/urllib2.html#urllib2.urlopen

urllib2.urlopen(url [, data] [, timeout]) Откройте URL-адрес URL, который может быть строкой или объектом Request.

Пример:

theurl = "www.example.com"
try:
    resp = urllib2.urlopen(theurl)
    print resp.read()
except IOError as e:
    print "Error: ", e

Пример 2 (с Request):

theurl = "www.example.com"
try:
    req = urllib2.Request(theurl)
    print req.get_full_url()
    print req.get_method()
    print dir(req)  # list lots of other stuff in Request
    resp = urllib2.urlopen(req)
    print resp.read()
except IOError as e:
    print "Error: ", e

Ответ 2

urllib2.Request() выглядит как вызов функции, но не является конструктором объекта. Он создает объект типа Request из модуля urllib2, документированный здесь.

Как таковой, он, вероятно, ничего не делает, кроме самого инициализации. Вы можете проверить это, посмотрев исходный код, который должен находиться в вашем каталоге установки Python (urllib2.py, по крайней мере, в Python 2.x).

Ответ 3

Если вы хотите, чтобы сконфигурированный URL-адрес в объекте Request использовал:

print(urllib2.Request.get_full_url())