import urllib2
class RedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_301(self, req, fp, code, msg, headers):
pass
def http_error_302(self, req, fp, code, msg, headers):
pass
opener = urllib2.build_opener(RedirectHandler)
opener.open('http://www.google.cn')
COOKIE
urllib2 对 COOKIE 的处理也是自动的。如果需要得到某个 COOKIE 项的值,可以这么做:
代码如下:
import urllib2
import COOKIElib
COOKIE = COOKIElib.COOKIEJar()
opener = urllib2.build_opener(urllib2.HTTPCOOKIEProcessor(COOKIE))
respOnse= opener.open('http://www.google.com')
for item in COOKIE:
if item.name == 'some_COOKIE_item_name':
print item.value
使用 HTTP 的 PUT 和 DELETE 方法
urllib2 只支持 HTTP 的 GET 和 POST 方法,如果要使用 HTTP PUT 和 DELETE ,只能使用比较低层的 httplib 库。虽然如此,我们还是能通过下面的方式,使 urllib2 能够发出 PUT 或 DELETE 的请求:
代码如下:
import urllib2
request = urllib2.Request(uri, data=data)
request.get_method = lambda: 'PUT' # or 'DELETE'
respOnse= urllib2.urlopen(request)
这种做法虽然属于 Hack 的方式,但实际使用起来也没什么问题。
得到 HTTP 的返回码
对于 200 OK 来说,只要使用 urlopen 返回的 response 对象的 getcode() 方法就可以得到 HTTP 的返回码。但对其它返回码来说,urlopen 会抛出异常。这时候,就要检查异常对象的 code 属性了:
代码如下:
import urllib2
try:
respOnse= urllib2.urlopen('http://www.jb51.ent')
except urllib2.HTTPError, e:
print e.code
Debug Log
使用 urllib2 时,可以通过下面的方法把 debug Log 打开,这样收发包的内容就会在屏幕上打印出来,方便调试,有时可以省去抓包的工作
代码如下:
import urllib2
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler)
urllib2.install_opener(opener)
respOnse= urllib2.urlopen('http://www.google.com')