urllib2.urlopen()函數不支持驗證、cookie或者其它HTTP高級功能。要支持這些功能,必須使用build_opener()函數創建自定義Opener對象。
1. build_opener([handler1 [ handler2, ... ]])
參數handler是Handler實例,常用的有HTTPBasicAuthHandler、HTTPCookieProcessor、ProxyHandler等。
build_opener ()返回的對象具有open()方法,與urlopen()函數的功能相同。
如果要修改http報頭,可以用:
import urllib2 opener = urllib2.build_opener() opener.addheaders = [('User-agent', 'Mozilla/5.0')] opener.open('http://www.example.com/')
2. install_opener(opener)
安裝不同的opener對象作為urlopen()使用的全局opener。
3. 密碼驗證(HTTPBasicAuthHandler)
HTTPBasicAuthHandler()處理程序可用add_password()來設置密碼。
h.add_password(realm,uri,user,passwd)
realm是與驗證相關聯的名稱或描述信息,取決於遠程服務器。uri是基URL。user和passwd分別指定用戶名和密碼。
import urllib2 auth=urllib2.HTTPBasicAuthHandler() auth.add_password('Administrator','http://www.example.com','Dave','123456') opener=urllib2.build_opener(auth) u=opener.open('http://www.example.com/evilplan.html')
4. Cookie處理(HTTPCookieProcessor)
import urllib2,cookielib cookie=cookielib.CookieJar() cookiehand=urllib2.HTTPCookieProcessor(cookie) opener=urllib2.build_opener(cookiehand)
5.代理(ProxyHandler)
ProxyHandler(proxies)參數proxies是一個字典,將協議名稱(http,ftp)等映射到相應代理服務器的URL。
proxy=ProxyHandler({'http':'http://someproxy.com:8080'}) auth=HTTPBasicAuthHandler() auth.add_password() opener=build_opener(auth,proxy)
也可以在urlopen中使用代理
import urllib2 proxy = 'http://%s:%s@%s' % ('userName', 'password', 'proxy') inforMation = urllib2.urlopen("http://www.example.com", proxies={'http':proxy})