python—urllib2 中自定義 opener 詳解

urllib2.urlopen()函數不支持驗證、cookie或者其它HTTP高級功能。要支持這些功能,必須使用build_opener()函數建立自定義Opener對象。html

 代碼以下:
build_opener([handler1 [ handler2, ... ]])
服務器

參數handler是Handler實例,經常使用的有HTTPBasicAuthHandler、HTTPCookieProcessor、ProxyHandler等。cookie

build_opener ()返回的對象具備open()方法,與urlopen()函數的功能相同。函數

若是要修改http報頭,能夠用:ui

代碼以下:
import urllib2
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
opener.open('http://www.example.com/')
url

2. install_opener(opener)spa

安裝不一樣的opener對象做爲urlopen()使用的全局opener。代理

3. 密碼驗證(HTTPBasicAuthHandler)htm

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。

代碼以下:

import urllib2
proxy=urllib2.ProxyHandler({'http':'http://someproxy.com:8080'})
auth=urlib2.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}) 

相關文章
相關標籤/搜索