opener:用于获取url,一般情况下使用默认opener,通过urlopen调用。

handlers:真正处理web请求的对象,知道怎样通过特定的协议打开url,获取页面信息。


下面介绍几个有关的函数:

build_opener:用来创建opener对象,他只需要一次函数调用。默认添加几个处理器,但提供快捷的方法来添加或更新默认处理器。

install_opener:为全局设置默认的opener。

通过一个实例来讲解使用HTTPBasicAuthHandler。

1、创建HTTPBasicAuthHandler实例

2、添加需要的验证用户和密码

3、创建一个OpenerDirector实例并安装默认的handlers

4、打开请求页面并获取数据

auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(None,'http://test.example.com/','www','www')
opener = urllib2.build_opener(auth_handler)
res = opener.open('http://test.example.com/index.php')
# 获取handlers
print opener.handlers


cookie处理:handler会自动处理cookie的。

import urllib2
import cookielib                                               
cookie = cookielib.LWPCookieJar()                              
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
res = opener.open('http://www.baidu.com')                            
for item incookie:
      printitem.name,item.value


data传送:GET和POST方法

# coding:utf-8
import urllib2
import urllib
# GET method
url = 'http://tieba.baidu.com/p/2985431371?pn=2'
req = urllib2.Request(url)
res = urllib2.urlopen(req)
print res.read()
# POST method
#编码使用urllib的urlencode函数
postdata=urllib.urlencode({
    'username':'test',
    'password':'test',
    'continueURI':'http://www.verycd.com/',
    'fk':'',
    'login_submit':'登录'
})
req = urllib2.Request(
    url = 'http://secure.verycd.com/signin',
    data = postdata
)
result = urllib2.urlopen(req)
print result.read()


打开debug模式:有时候可能代码出现问题,需要调试,看看数据流在哪个步骤出现问题,就需要打开debug模式。

import urllib2
handler = urllib2.HTTPHandler(debuglevel=1)
opener = urllib2.build_opener(handler)
opener.open('http://www.baidu.com')


执行这段代码会出现http的发送数据流和响应数据流

urllib2模块学习--opener和handlers使用_handler