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的发送数据流和响应数据流
转载于:https://blog.51cto.com/liuping0906/1399676