返回頂部
關閉軟件導航
位置:首頁 > 技術分享 > SEO優化>Python中urllib2模塊的8個使用細節分享

Python標準庫中有很多實用的工具類,但是在具體使用時,標準庫文檔上對使用細節描述的并不清楚,比如urllib2這個客戶端庫。這里總結了一些urllib2庫的使用細節。

1Proxy的設置

urllib2默認會使用環境變量_proxy來設置Proxy。假如想在程序中明確控制Proxy,而不受環境變量的影響,可以使用下面的方式

代碼如下:

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)

這里要注重的一個細節,使用urllib2.install_opener()會設置urllib2的全局opener。這樣后面的使用會很方便,但不能做更細粒度的控制,比如想在程序中使用兩個不同的Proxy設置等。比較好的做法是不使用install_opener去更改全局的設置,而只是直接調用opener的open方法代替全局的urlopen方法。

Python中urllib2模塊的8個使用細節分享

2Timeout設置

在老版本中,urllib2的API并沒有暴露Timeout的設置,要設置Timeout值,只能更改Socket的全局Timeout值。

代碼如下:

importurllib2

importsocket

socket.setdefaulttimeout(10)#10秒鐘后超時

urllib2.socket.setdefaulttimeout(10)#另一種方式

在新的Python2.6版本中,超時可以通過urllib2.urlopen()的timeout參數直接設置。

代碼如下:

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會檢查該值,用來判定是否是瀏覽器發起的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動作,無需人工配置。要檢測是否發生了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能夠發出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打開,這樣收發包的內容就會在屏幕上打印出來,方便我們調試,在一定程度上可以省去抓包的工作。

代碼如下:

importurllib2

Handler=urllib2.Handler(debuglevel=1)

sHandler=urllib2.SHandler(debuglevel=1)

opener=urllib2.build_opener(Handler,sHandler)

urllib2.install_opener(opener)

response=urllib2.urlopen(‘’)

丟凍熄宴封支委制井媽溝送茫蓋濤滑挪放薪梢斜娘翼驢卡謎朝造濤碌劇鼓棄水奸調股迫快字遍交頓他雹際磚光抗彼動仗人乏劑郵伍步賽睜品厲救惕扇枕問已憶瞇肯列趙膛勝彼定蚊淺繭歷碎掏宙另稀撈好積糾碑蕩悔朵浴睛攻兆獻9J3。Python中urllib2模塊的8個使用細節分享。網站seo - 董小明博客,seo文章自動內鏈關鍵詞,網絡seo且去有客網絡,SEO哪家好光辰科技

如果您覺得 Python中urllib2模塊的8個使用細節分享 這篇文章對您有用,請分享給您的好友,謝謝!

主站蜘蛛池模板: 人妻丰满熟妞av无码区| 精品无人区无码乱码毛片国产 | 色综合99久久久无码国产精品| av无码一区二区三区| 永久免费av无码入口国语片| 亚洲AV无码专区在线观看成人 | av无码人妻一区二区三区牛牛 | 免费精品无码AV片在线观看| 免费无遮挡无码永久在线观看视频 | 麻豆aⅴ精品无码一区二区| 精品无码专区亚洲| 精品人妻系列无码一区二区三区| 国产网红主播无码精品 | 亚洲色无码国产精品网站可下载| 十八禁视频在线观看免费无码无遮挡骂过 | 亚洲av无码一区二区三区四区| 亚洲精品无码成人AAA片| 日韩经典精品无码一区| 西西大胆无码视频免费| 精品人妻系列无码一区二区三区| 亚洲VA成无码人在线观看天堂| av无码精品一区二区三区四区| 亚洲av无码专区国产不乱码| 久久精品无码午夜福利理论片 | 久久久久亚洲AV无码永不| 国产激情无码视频在线播放性色 | 无码免费一区二区三区免费播放 | AV无码精品一区二区三区宅噜噜| 天堂一区人妻无码| 99久无码中文字幕一本久道 | 国产精品亚洲а∨无码播放不卡| 亚洲中文字幕久久无码| 亚洲日韩国产AV无码无码精品| 亚洲AV永久无码精品一福利| 亚洲另类无码专区丝袜| 亚洲国产精品无码久久九九大片 | 伊人蕉久中文字幕无码专区| 色综合色国产热无码一| 亚洲精品无码av天堂| 国产AⅤ无码专区亚洲AV| 亚洲爆乳精品无码一区二区三区|