最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python33 urllib2使用方法細(xì)節(jié)講解

 更新時(shí)間:2013年12月03日 16:06:53   作者:  
Python 標(biāo)準(zhǔn)庫(kù)中有很多實(shí)用的工具類(lèi),這里總結(jié)一些 urllib2 的使用細(xì)節(jié):Proxy 的設(shè)置、Timeout 設(shè)置、在 HTTP Request 中加入特定的 、Cookie、使用 HTTP 的 PUT 和 DELETE 方法

Proxy 的設(shè)置

urllib2 默認(rèn)會(huì)使用環(huán)境變量 http_proxy 來(lái)設(shè)置 HTTP Proxy。如果想在程序中明確控制 Proxy 而不受環(huán)境變量的影響,可以使用下面的方式

復(fù)制代碼 代碼如下:

import urllib2

enable_proxy = True
proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'})
null_proxy_handler = urllib2.ProxyHandler({})

if enable_proxy:
    opener = urllib2.build_opener(proxy_handler)
else:
    opener = urllib2.build_opener(null_proxy_handler)

urllib2.install_opener(opener)

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

Timeout 設(shè)置

在老版 Python 中,urllib2 的 API 并沒(méi)有暴露 Timeout 的設(shè)置,要設(shè)置 Timeout 值,只能更改 Socket 的全局 Timeout 值。

復(fù)制代碼 代碼如下:

import urllib2
import socket

socket.setdefaulttimeout(10) # 10 秒鐘后超時(shí)
urllib2.socket.setdefaulttimeout(10) # 另一種方式

在 Python 2.6 以后,超時(shí)可以通過(guò) urllib2.urlopen() 的 timeout 參數(shù)直接設(shè)置。

復(fù)制代碼 代碼如下:

import urllib2
response = urllib2.urlopen('http://www.google.com', timeout=10)

在 HTTP Request 中加入特定的 Header

要加入 header,需要使用 Request 對(duì)象:

復(fù)制代碼 代碼如下:

import urllib2

request = urllib2.Request(uri)
request.add_header('User-Agent', 'fake-client')
response = urllib2.urlopen(request)

對(duì)有些 header 要特別留意,服務(wù)器會(huì)針對(duì)這些 header 做檢查

User-Agent : 有些服務(wù)器或 Proxy 會(huì)通過(guò)該值來(lái)判斷是否是瀏覽器發(fā)出的請(qǐng)求

Content-Type : 在使用 REST 接口時(shí),服務(wù)器會(huì)檢查該值,用來(lái)確定 HTTP Body 中的內(nèi)容該怎樣解析。常見(jiàn)的取值有:

application/xml : 在 XML RPC,如 RESTful/SOAP 調(diào)用時(shí)使用
application/json : 在 JSON RPC 調(diào)用時(shí)使用
application/x-www-form-urlencoded : 瀏覽器提交 Web 表單時(shí)使用
在使用服務(wù)器提供的 RESTful 或 SOAP 服務(wù)時(shí), Content-Type 設(shè)置錯(cuò)誤會(huì)導(dǎo)致服務(wù)器拒絕服務(wù)

Redirect

urllib2 默認(rèn)情況下會(huì)針對(duì) HTTP 3XX 返回碼自動(dòng)進(jìn)行 redirect 動(dòng)作,無(wú)需人工配置。要檢測(cè)是否發(fā)生了 redirect 動(dòng)作,只要檢查一下 Response 的 URL 和 Request 的 URL 是否一致就可以了。

復(fù)制代碼 代碼如下:

import urllib2
response = urllib2.urlopen('http://www.google.cn')
redirected = response.geturl() == 'http://www.google.cn'

如果不想自動(dòng) redirect,除了使用更低層次的 httplib 庫(kù)之外,還可以自定義 HTTPRedirectHandler 類(lèi)。

復(fù)制代碼 代碼如下:

import urllib2

class RedirectHandler(urllib2.HTTPRedirectHandler):
    def http_error_301(self, req, fp, code, msg, headers):
        pass
    def http_error_302(self, req, fp, code, msg, headers):
        pass

opener = urllib2.build_opener(RedirectHandler)
opener.open('http://www.google.cn')

Cookie

urllib2 對(duì) Cookie 的處理也是自動(dòng)的。如果需要得到某個(gè) Cookie 項(xiàng)的值,可以這么做:

復(fù)制代碼 代碼如下:

import urllib2
import cookielib

cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response = opener.open('http://www.google.com')
for item in cookie:
    if item.name == 'some_cookie_item_name':
        print item.value

使用 HTTP 的 PUT 和 DELETE 方法

urllib2 只支持 HTTP 的 GET 和 POST 方法,如果要使用 HTTP PUT 和 DELETE ,只能使用比較低層的 httplib 庫(kù)。雖然如此,我們還是能通過(guò)下面的方式,使 urllib2 能夠發(fā)出 PUT 或 DELETE 的請(qǐng)求:

復(fù)制代碼 代碼如下:

import urllib2

request = urllib2.Request(uri, data=data)
request.get_method = lambda: 'PUT' # or 'DELETE'
response = urllib2.urlopen(request)

這種做法雖然屬于 Hack 的方式,但實(shí)際使用起來(lái)也沒(méi)什么問(wèn)題。

得到 HTTP 的返回碼

對(duì)于 200 OK 來(lái)說(shuō),只要使用 urlopen 返回的 response 對(duì)象的 getcode() 方法就可以得到 HTTP 的返回碼。但對(duì)其它返回碼來(lái)說(shuō),urlopen 會(huì)拋出異常。這時(shí)候,就要檢查異常對(duì)象的 code 屬性了:

復(fù)制代碼 代碼如下:

import urllib2
try:
    response = urllib2.urlopen('http://www.jb51.ent')
except urllib2.HTTPError, e:
    print e.code
Debug Log

使用 urllib2 時(shí),可以通過(guò)下面的方法把 debug Log 打開(kāi),這樣收發(fā)包的內(nèi)容就會(huì)在屏幕上打印出來(lái),方便調(diào)試,有時(shí)可以省去抓包的工作

復(fù)制代碼 代碼如下:

import urllib2

httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler)

urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.google.com')

相關(guān)文章

  • Django單元測(cè)試的具體使用

    Django單元測(cè)試的具體使用

    Django提供了一套強(qiáng)大的測(cè)試工具來(lái)幫助開(kāi)發(fā)者編寫(xiě)和運(yùn)行單元測(cè)試,本文就來(lái)介紹一下Django中的單元測(cè)試,包括測(cè)試原理、編寫(xiě)測(cè)試用例和運(yùn)行測(cè)試,感興趣的可以了解一下
    2023-11-11
  • TensorFlow基于MNIST數(shù)據(jù)集實(shí)現(xiàn)車(chē)牌識(shí)別(初步演示版)

    TensorFlow基于MNIST數(shù)據(jù)集實(shí)現(xiàn)車(chē)牌識(shí)別(初步演示版)

    這篇文章主要介紹了TensorFlow基于MNIST數(shù)據(jù)集實(shí)現(xiàn)車(chē)牌識(shí)別(初步演示版),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python實(shí)現(xiàn)約瑟夫環(huán)問(wèn)題的方法

    Python實(shí)現(xiàn)約瑟夫環(huán)問(wèn)題的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)約瑟夫環(huán)問(wèn)題的方法,詳細(xì)分析了約瑟夫環(huán)問(wèn)題的描述、原理與解決方法,需要的朋友可以參考下
    2016-05-05
  • python遺傳算法之geatpy的深入理解

    python遺傳算法之geatpy的深入理解

    本文主要介紹了python遺傳算法之geatpy的深入理解,主要從geatpy中的各種數(shù)據(jù)結(jié)構(gòu)一步一步進(jìn)行學(xué)習(xí),具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-04-04
  • python發(fā)布模塊的步驟分享

    python發(fā)布模塊的步驟分享

    這篇文章主要介紹了python發(fā)布模塊的步驟,需要的朋友可以參考下
    2014-02-02
  • PyQt5每天必學(xué)之工具提示功能

    PyQt5每天必學(xué)之工具提示功能

    這篇文章主要為大家詳細(xì)介紹了PyQt5每天必學(xué)之工具提示功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Django項(xiàng)目實(shí)戰(zhàn)之用戶(hù)頭像上傳與訪問(wèn)的示例

    Django項(xiàng)目實(shí)戰(zhàn)之用戶(hù)頭像上傳與訪問(wèn)的示例

    這篇文章主要介紹了Django項(xiàng)目實(shí)戰(zhàn)之用戶(hù)頭像上傳與訪問(wèn)的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python著名游戲?qū)崙?zhàn)之方塊連接 我的世界

    Python著名游戲?qū)崙?zhàn)之方塊連接 我的世界

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,學(xué)的扎不扎實(shí)要通過(guò)實(shí)戰(zhàn)才能看出來(lái),本篇文章手把手帶你模仿著名游戲——我的世界,大家可以在過(guò)程中查缺補(bǔ)漏,看看自己掌握程度怎么樣
    2021-10-10
  • pytorch簡(jiǎn)介

    pytorch簡(jiǎn)介

    Pytorch是torch的python版本,是由Facebook開(kāi)源的神經(jīng)網(wǎng)絡(luò)框架,專(zhuān)門(mén)針對(duì) GPU 加速的深度神經(jīng)網(wǎng)絡(luò)(DNN)編程。這篇文章給大家介紹pytorch的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2020-11-11
  • Python中的變量及簡(jiǎn)單數(shù)據(jù)類(lèi)型應(yīng)用

    Python中的變量及簡(jiǎn)單數(shù)據(jù)類(lèi)型應(yīng)用

    這篇文章主要介紹了Python中的變量及簡(jiǎn)單數(shù)據(jù)類(lèi)型應(yīng)用,簡(jiǎn)單的數(shù)據(jù)類(lèi)型包括字符串和數(shù)字,更多詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03

最新評(píng)論

漳州市| 嵊泗县| 临沂市| 阜阳市| 谢通门县| 怀宁县| 安西县| 尉氏县| 海安县| 三门峡市| 荣昌县| 米脂县| 嘉义县| 汽车| 陇西县| 深圳市| 华安县| 门头沟区| 定州市| 五峰| 甘肃省| 乌苏市| 清涧县| 宜丰县| 界首市| 迭部县| 庆阳市| 枞阳县| 措勤县| 沅陵县| 元氏县| 吉首市| 秀山| 理塘县| 乌兰浩特市| 芮城县| 望城县| 承德市| 中江县| 苗栗县| 炎陵县|