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的发送数据流和响应数据流