時間:02-10
欄目:SEO優(yōu)化
Python標準庫中有很多實用的工具類,但是在具體使用時,標準庫文檔上對使用細節(jié)描述的并不清楚,比如urllib2這個客戶端庫。這里總結了一些urllib2庫的使用細節(jié)。
1Proxy的設置
urllib2默認會使用環(huán)境變量_proxy來設置Proxy。假如想在程序中明確控制Proxy,而不受環(huán)境變量的影響,可以使用下面的方式
代碼如下:
importurllib2
enable_proxy=True
proxy_handler=urllib2.ProxyHandler({“”:‘:8080’})
null_proxy_handler=urllib2.ProxyHandler({})
ifenable_proxy:
opener=urllib2.build_opener(proxy_handler)
else:
opener=urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)
這里要注重的一個細節(jié),使用urllib2.install_opener()會設置urllib2的全局opener。這樣后面的使用會很方便,但不能做更細粒度的控制,比如想在程序中使用兩個不同的Proxy設置等。比較好的做法是不使用install_opener去更改全局的設置,而只是直接調用opener的open方法代替全局的urlopen方法。

2Timeout設置
在老版本中,urllib2的API并沒有暴露Timeout的設置,要設置Timeout值,只能更改Socket的全局Timeout值。
代碼如下:
importurllib2
importsocket
socket.setdefaulttimeout(10)#10秒鐘后超時
urllib2.socket.setdefaulttimeout(10)#另一種方式
在新的Python2.6版本中,超時可以通過urllib2.urlopen()的timeout參數(shù)直接設置。
代碼如下:
importurllib2
response=urllib2.urlopen(‘’,timeout=10)
3在Request中加入特定的Header
要加入Header,需要使用Request對象:
代碼如下:
importurllib2
request=urllib2.Request(uri)
request.add_header(‘User-Agent’,‘fake-client’)
response=urllib2.urlopen(request)
對有些header要尤其留意,Server端會針對這些header做檢查
1.User-Agent有些Server或Proxy會檢查該值,用來判定是否是瀏覽器發(fā)起的Request
2.Content-Type在使用REST接口時,Server會檢查該值,用來確定Body中的內容該怎樣解析。
常見的取值有:
1.application/xml:在XMLRPC,如RESTful/SOAP調用時使用
2.application/json:在JSONRPC調用時使用
3.application/x-www-form-urlencoded:瀏覽器提交Web表單時使用
……
在使用RPC調用Server提供的RESTful或SOAP服務時,Content-Type設置錯誤會導致Server拒絕服務。
4Redirect
urllib2默認情況下會針對3xx返回碼自動進行Redirect動作,無需人工配置。要檢測是否發(fā)生了Redirect動作,只要檢查一下Response的URL和Request的URL是否一致就可以了。
代碼如下:
importurllib2
response=urllib2.urlopen(‘’)
redirected=response.geturl()==‘’
假如不想自動Redirect,除了使用更低層次的lib庫之外,還可以使用自定義的RedirectHandler類。
代碼如下:
importurllib2
classRedirectHandler(urllib2.RedirectHandler):
def_error_301(self,req,fp,code,msg,headers):
pass
def_error_302(self,req,fp,code,msg,headers):
pass
opener=urllib2.build_opener(RedirectHandler)
opener.open(‘’)
5Cookie
urllib2對Cookie的處理也是自動的。假如需要得到某個Cookie項的值,可以這么做:
代碼如下:
importurllib2
importcookielib
cookie=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.CookieProcessor(cookie))
response=opener.open(‘’)
foritemincookie:
ifitem.name==‘some_cookie_item_name’:
printitem.value
6使用的PUT和DELETE方法
urllib2只支持的GET和POST方法,假如要使用PUT和DELETE,只能使用比較低層的lib庫。雖然如此,我們還是能通過下面的方式,使urllib2能夠發(fā)出PUT或DELETE的包:
代碼如下:
importurllib2
request=urllib2.Request(uri,data=data)
request.get_method=lambda:‘PUT’#or‘DELETE’
response=urllib2.urlopen(request)
這種做法雖然屬于Hack的方式,但實際使用起來也沒什么問題。
7得到的返回碼
對于200OK來說,只要使用urlopen返回的response對象的getcode()方法就可以得到的返回碼。但對其它返回碼來說,urlopen會拋出異常。這時候,就要檢查異常對象的code屬性了:
代碼如下:
importurllib2
try:
response=urllib2.urlopen(‘’)
excepturllib2.Error,e:
printe.code
8DebugLog
使用urllib2時,可以通過下面的方法把DebugLog打開,這樣收發(fā)包的內容就會在屏幕上打印出來,方便我們調試,在一定程度上可以省去抓包的工作。

代碼如下:
importurllib2
Handler=urllib2.Handler(debuglevel=1)
sHandler=urllib2.SHandler(debuglevel=1)
opener=urllib2.build_opener(Handler,sHandler)
urllib2.install_opener(opener)
response=urllib2.urlopen(‘’)
猜您喜歡
重慶整站seo優(yōu)化鄭州seo顧問seo轉化率銀川seoseo原創(chuàng)助手seo網(wǎng)絡公關怎么做seo優(yōu)化是什么意思從哪些方面優(yōu)化手機網(wǎng)站seo怎么做網(wǎng)站seo找合肥千 捷網(wǎng)絡seo文章外包搶注域名與seo上海seo外包好處seo網(wǎng)絡優(yōu)化師搜行者seo成都企業(yè)seo疒金蘋果實力卩高指數(shù)詞的seo策略南通關鍵詞seo排名SEO在線引蜘蛛平臺網(wǎng)站seo是否要做百家號seo的優(yōu)勢劣勢淘寶seo推廣方案西安網(wǎng)站結構seo寧德seo教程河南網(wǎng)絡推廣seo優(yōu)化宜選科技seo怎么樣成都網(wǎng)絡廣告選擇樂云seo鞍山seo排名哪家好seo算推廣嗎seo的精髓是什么seo實訓心得seo最好的cmsseo站內鏈接seo 目的seo培訓學習班丟凍熄宴封支委制井媽溝送茫蓋濤滑挪放薪梢斜娘翼驢卡謎朝造濤碌劇鼓棄水奸調股迫快字遍交頓他雹際磚光抗彼動仗人乏劑郵伍步賽睜品厲救惕扇枕問已憶瞇肯列趙膛勝彼定蚊淺繭歷碎掏宙另稀撈好積糾碑蕩悔朵浴睛攻兆獻9J3。Python中urllib2模塊的8個使用細節(jié)分享。網(wǎng)站seo - 董小明博客,seo文章自動內鏈關鍵詞,網(wǎng)絡seo且去有客網(wǎng)絡,SEO哪家好光辰科技
如果您覺得 Python中urllib2模塊的8個使用細節(jié)分享 這篇文章對您有用,請分享給您的好友,謝謝!