urllib2.Request(<url>) 的作用是什么,如何打印/查看它

19 投票
3 回答
29792 浏览
提问于 2025-04-16 20:07

我正在尝试了解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

所以我显然做错了什么。如果有人能帮我解答我的问题,那就太好了。

3 个回答

0

如果你想在Request对象中获取构建好的网址,可以使用:

print(urllib2.Request.get_full_url())
4

urllib2.Request() 看起来像是一个函数调用,但其实不是——它是一个对象构造器。它是用来从 urllib2 模块创建一个 Request 类型的对象,详细信息可以在 这里 找到。

所以,它可能只是在初始化自己,并没有其他的功能。你可以通过查看源代码来验证这一点,源代码应该在你安装的 Python 的 lib 目录下(在 Python 2.x 中是 urllib2.py)。

17

你问的这个“Request”类是这样的: http://docs.python.org/library/urllib2.html#urllib2.Request

class urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])

这个类是用来表示一个网址请求的。

你其实想用的函数是用来发请求的,它可以接受一个 Request 对象,或者把你提供的网址字符串包装成一个请求对象。这个函数是: http://docs.python.org/library/urllib2.html#urllib2.urlopen

urllib2.urlopen(url[, data][,timeout]) 打开指定的网址 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

撰写回答