Python學(xué)習(xí)筆記-Requests

1城瞎、安裝

終端cmd 輸入:

pip install requests

2、發(fā)送請(qǐng)求

import requests

>>> r=requests.get( 'https://github.com/timeline.json' )

>>> r=requests.post( "http://httpbin.org/post" )

>>>r=requests.put("http://httpbin.org/put")

>>>r=requests.delete("http://httpbin.org/delete")

>>>r=requests.head("http://httpbin.org/get")

>>>r=requests.options("http://httpbin.org/get")

3俱恶、傳遞參數(shù)

URL參數(shù)可直接跟在問(wèn)號(hào)后,置于URL之后,如:httpbin.org/get?key=val募判,除此以外,

get方法:

>>>payload={'key1':'value1','key2':'value2'}

>>>r=requests.get("http://httpbin.org/get",params=payload)

post方法:

>>>payload={'key1':'value1','key2':'value2'}

>>>r=requests.post("http://httpbin.org/post",data=payload)

其中咒唆,若請(qǐng)求參數(shù)為json:先將參數(shù)轉(zhuǎn)化為json格式(json.dumps())

>>>import ?json

>>>url = ' https://api.github.com/some/endpoint '

>>>payload = {'some':'data'}

>>>r =requests.post (url,data=json.dumps(payload))

2.4.2版本之后可直接使用json參數(shù)傳遞

>>>url = 'https://api.github.com/some/endpoint'

>>>payload = {'some':'data'}

>>>r = requests.post (url,?json=payload)

上傳文件參數(shù)(Multipart-Encoded):

>>>url = 'http://httpbin.org/post'

>>>files = { 'file' : open('report.xls','rb') }

>>>r = requests.post(url, files=files)

4届垫、響應(yīng)內(nèi)容

>>>importrequests

>>>r=requests.get('https://github.com/timeline.json')

>>>r.text

u'[{"repository":{"open_issues":0,"url":"https://github.com/...

Requests 會(huì)自動(dòng)解碼來(lái)自服務(wù)器的內(nèi)容。大多數(shù) unicode 字符集都能被無(wú)縫地解碼全释。

請(qǐng)求發(fā)出后装处,Requests 會(huì)基于 HTTP 頭部對(duì)響應(yīng)的編碼作出有根據(jù)的推測(cè)。當(dāng)你訪問(wèn)r.text之時(shí)浸船,Requests 會(huì)使用其推測(cè)的文本編碼妄迁。

也能以字節(jié)的方式訪問(wèn)請(qǐng)求響應(yīng)體,對(duì)于非文本請(qǐng)求:

>>>r.content

b'[{"repository":{"open_issues":0,"url":"https://github.com/...

Requests 會(huì)自動(dòng)為你解碼gzip和deflate傳輸編碼的響應(yīng)數(shù)據(jù)李命。

例如登淘,以請(qǐng)求返回的二進(jìn)制數(shù)據(jù)創(chuàng)建一張圖片,你可以使用如下代碼:

>>>from ?PIL ?import ?Image

>>>from ?io ?import ?BytesIO

>>>i = Image.open(BytesIO(r.content))

Requests 中也有一個(gè)內(nèi)置的 JSON 解碼器封字,來(lái)處理 JSON 數(shù)據(jù):

>>>import ?requests

>>>r = requests.get('https://github.com/timeline.json')

>>>r.json()

[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...

>>>r.json()['url'] ? ? ? ? ? #獲取json屬性值

如果 JSON 解碼失敗黔州,r.json()就會(huì)拋出一個(gè)異常。例如阔籽,相應(yīng)內(nèi)容是 401 (Unauthorized)流妻,嘗試訪問(wèn)r.json()將會(huì)拋出ValueError:NoJSONobjectcouldbedecoded異常。

5笆制、定制請(qǐng)求頭

>>>url = 'https://api.github.com/some/endpoint'

>>>headers = {'user-agent':'my-app/0.0.1'}

>>>r = requests.get(url, headers=headers)

注意: 定制 header 的優(yōu)先級(jí)低于某些特定的信息源合冀,例如:

? ? ? ?如果在.netrc中設(shè)置了用戶(hù)認(rèn)證信息,使用headers=設(shè)置的授權(quán)就不會(huì)生效项贺。而如果設(shè)置了 ? ? ? ? ? ? ? auth=參數(shù)君躺,``.netrc`` 的設(shè)置就無(wú)效了。

? ? ? ? 如果被重定向到別的主機(jī)开缎,授權(quán) header 就會(huì)被刪除棕叫。

? ? ? ? 代理授權(quán) header 會(huì)被 URL 中提供的代理身份覆蓋掉。

? ? ? ? ?在我們能判斷內(nèi)容長(zhǎng)度的情況下奕删,header 的 Content-Length 會(huì)被改寫(xiě)俺泣。

更進(jìn)一步講,Requests 不會(huì)基于定制 header 的具體情況改變自己的行為。只不過(guò)在最后的請(qǐng)求中伏钠,所有的 header 信息都會(huì)被傳遞進(jìn)去横漏。

注意: 所有的 header 值必須是string、bytestring 或者 unicode熟掂。盡管傳遞 unicode header 也是允許的缎浇,但不建議這樣做。

6赴肚、響應(yīng)狀態(tài)碼

>>>r=requests.get('http://httpbin.org/get')

>>>r.status_code

200

如果發(fā)送了一個(gè)錯(cuò)誤請(qǐng)求(一個(gè) 4XX 客戶(hù)端錯(cuò)誤素跺,或者 5XX 服務(wù)器錯(cuò)誤響應(yīng)),我們可以通過(guò)Response.raise_for_status()來(lái)拋出異常:

>>>bad_r=requests.get('http://httpbin.org/status/404')

>>>bad_r.status_code

404

>>>bad_r.raise_for_status()

Traceback (most recent call last):File"requests/models.py", line832, in raise_for_statusraisehttp_error

requests.exceptions.HTTPError:404 Client Error

7誉券、響應(yīng)頭

>>>r.headers

{'content-encoding': 'gzip','transfer-encoding': 'chunked','connection': 'close','server': 'nginx/1.0.4','x-runtime': '148ms','etag': '"e1ca502697e5c9317743dc078f67693f"','content-type': 'application/json'}

8指厌、Cookie

響應(yīng)中包含cookie,可快速訪問(wèn)

>>>url='http://example.com/some/cookie/setting/url'

>>>r=requests.get(url)

>>>r.cookies['example_cookie_name']

'example_cookie_value'

也使用cookie參數(shù)踊跟,發(fā)送cookie到服務(wù)器踩验,

>>>url='http://httpbin.org/cookies

'>>>cookies=dict(cookies_are='working')

>>>r=requests.get(url, cookies=cookies)

>>>r.text

'{"cookies": {"cookies_are": "working"}}'

9.其他

重定向和請(qǐng)求歷史:

默認(rèn)情況下,除了 HEAD, Requests 會(huì)自動(dòng)處理所有重定向商玫。

可以使用響應(yīng)對(duì)象的history方法來(lái)追蹤重定向晰甚。

Response.history是一個(gè)Response對(duì)象的列表,為了完成請(qǐng)求而創(chuàng)建了這些對(duì)象决帖。這個(gè)對(duì)象列表按照從最老到最近的請(qǐng)求進(jìn)行排序。

例如蓖捶,Github 將所有的 HTTP 請(qǐng)求重定向到 HTTPS:

>>>r=requests.get('http://github.com')

>>>r.url'https://github.com/'

>>>r.status_code200

>>>r.history

[< Response [301]>]

如果你使用的是GET地回、OPTIONS、POST俊鱼、PUT刻像、PATCH 或者 DELETE,那么你可以通過(guò)allow_redirects參數(shù)禁用重定向處理:

>>>r =requests.get('http://github.com', allow_redirects=False)

>>>r.status_code

301

超時(shí)

你可以告訴 requests 在經(jīng)過(guò)以timeout參數(shù)設(shè)定的秒數(shù)時(shí)間之后停止等待響應(yīng):

>>>requests.get('http://github.com',timeout=0.001)

注意

timeout僅對(duì)連接過(guò)程有效并闲,與響應(yīng)體的下載無(wú)關(guān)细睡。timeout并不是整個(gè)下載響應(yīng)的時(shí)間限制,而是如果服務(wù)器在timeout秒內(nèi)沒(méi)有應(yīng)答帝火,將會(huì)引發(fā)一個(gè)異常(更精確地說(shuō)溜徙,是在timeout秒內(nèi)沒(méi)有從基礎(chǔ)套接字上接收到任何字節(jié)的數(shù)據(jù)時(shí))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市犀填,隨后出現(xiàn)的幾起案子蠢壹,更是在濱河造成了極大的恐慌,老刑警劉巖九巡,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件图贸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)疏日,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)偿洁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人沟优,你說(shuō)我怎么就攤上這事涕滋。” “怎么了净神?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵何吝,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鹃唯,道長(zhǎng)爱榕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任坡慌,我火速辦了婚禮黔酥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洪橘。我一直安慰自己跪者,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布熄求。 她就那樣靜靜地躺著渣玲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弟晚。 梳的紋絲不亂的頭發(fā)上忘衍,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音卿城,去河邊找鬼枚钓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瑟押,可吹牛的內(nèi)容都是我干的搀捷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼多望,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嫩舟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起怀偷,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤至壤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后枢纠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體像街,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡黎棠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了镰绎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脓斩。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖畴栖,靈堂內(nèi)的尸體忽然破棺而出随静,到底是詐尸還是另有隱情,我是刑警寧澤吗讶,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布燎猛,位于F島的核電站,受9級(jí)特大地震影響照皆,放射性物質(zhì)發(fā)生泄漏重绷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一膜毁、第九天 我趴在偏房一處隱蔽的房頂上張望昭卓。 院中可真熱鬧,春花似錦瘟滨、人聲如沸候醒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)倒淫。三九已至,卻和暖如春败玉,著一層夾襖步出監(jiān)牢的瞬間敌土,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工绒怨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谦疾。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓南蹂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親念恍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子六剥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)峰伙,斷路器疗疟,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 目錄: Python網(wǎng)絡(luò)爬蟲(chóng)(一)- 入門(mén)基礎(chǔ)Python網(wǎng)絡(luò)爬蟲(chóng)(二)- urllib爬蟲(chóng)案例Python網(wǎng)絡(luò)爬...
    一只寫(xiě)程序的猿閱讀 12,871評(píng)論 17 68
  • 1.發(fā)送請(qǐng)求: import requests # 獲取數(shù)據(jù) #r是一個(gè) response 對(duì)象。包含請(qǐng)求返回的內(nèi)...
    阿爾卑斯山上的小灰兔閱讀 1,399評(píng)論 0 3
  • 深夜回到家瞳氓,屋中一片漆黑策彤,不是伸手不見(jiàn)五指,只是家具只有背影。 不想開(kāi)燈店诗,太累了裹刮,想躺一躺。 可躺在床上庞瘸,時(shí)間過(guò)了...
    李一十八閱讀 300評(píng)論 0 0
  • 二零一七年九月八日捧弃,傍晚五點(diǎn)二十七分 在資本家戴女士威逼利誘之下,勞工阿戴開(kāi)始了苦逼的創(chuàng)作擦囊。 事情是怎樣發(fā)生的...
    寄北北閱讀 700評(píng)論 0 0