urllib2.Request(<url>)做什么以及如何打印/查看它

use*_*462 18 python

我正在尝试了解urllib2如何工作以及如何在发送实际请求或响应之前封装其各种组件.

到目前为止,我有:

theurl = "www.example.com"
Run Code Online (Sandbox Code Playgroud)

这显然指定了要查看的URL.

req = urllib2.Request(theurl) 
Run Code Online (Sandbox Code Playgroud)

不知道这是做什么的,因此问题.

handle = urllib2.urlopen(req)
Run Code Online (Sandbox Code Playgroud)

这个获取页面并完成所需的所有请求和响应.

所以我的问题是,urllib2.Request实际上做了什么?

试着看看它以获得一个我尝试过的想法

print req 
Run Code Online (Sandbox Code Playgroud)

刚刚得到

<urllib2.Request instance at 0x123456789>
Run Code Online (Sandbox Code Playgroud)

我也试过了

print req.read() 
Run Code Online (Sandbox Code Playgroud)

得到了:

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
Run Code Online (Sandbox Code Playgroud)

所以我显然做错了什么.如果有人可以在我的两个问题中提供帮助,那就太棒了.

dka*_*ins 17

您询问的"请求"类:http: //docs.python.org/library/urllib2.html#urllib2.Request

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

此类是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
Run Code Online (Sandbox Code Playgroud)

例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
Run Code Online (Sandbox Code Playgroud)