requests基础3
Cookie
如果某個(gè)響應(yīng)中包含一些 cookie,你可以快速訪問它們:
>>> url = 'http://example.com/some/cookie/setting/url' >>> r = requests.get(url)>>> r.cookies['example_cookie_name'] 'example_cookie_value'要想發(fā)送你的cookies到服務(wù)器,可以使用?cookies?參數(shù):
>>> url = 'http://httpbin.org/cookies' >>> cookies = dict(cookies_are='working')>>> r = requests.get(url, cookies=cookies) >>> r.text '{"cookies": {"cookies_are": "working"}}'Cookie 的返回對(duì)象為?RequestsCookieJar,它的行為和字典類似,但界面更為完整,適合跨域名跨路徑使用。你還可以把 Cookie Jar 傳到 Requests 中:
>>> jar = requests.cookies.RequestsCookieJar() >>> jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies') >>> jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere') >>> url = 'http://httpbin.org/cookies' >>> r = requests.get(url, cookies=jar) >>> r.text '{"cookies": {"tasty_cookie": "yum"}}'重定向與請(qǐng)求歷史
默認(rèn)情況下,除了 HEAD, Requests 會(huì)自動(dòng)處理所有重定向。
可以使用響應(yīng)對(duì)象的?history?方法來追蹤重定向。
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_code 200>>> r.history [<Response [301]>]如果你使用的是GET、OPTIONS、POST、PUT、PATCH 或者 DELETE,那么你可以通過?allow_redirects?參數(shù)禁用重定向處理:
>>> r = requests.get('http://github.com', allow_redirects=False) >>> r.status_code 301 >>> r.history []如果你使用了 HEAD,你也可以啟用重定向:
>>> r = requests.head('http://github.com', allow_redirects=True) >>> r.url 'https://github.com/' >>> r.history [<Response [301]>]超時(shí)
你可以告訴 requests 在經(jīng)過以?timeout?參數(shù)設(shè)定的秒數(shù)時(shí)間之后停止等待響應(yīng)。基本上所有的生產(chǎn)代碼都應(yīng)該使用這一參數(shù)。如果不使用,你的程序可能會(huì)永遠(yuǎn)失去響應(yīng):
>>> requests.get('http://github.com', timeout=0.001) Traceback (most recent call last):File "<stdin>", line 1, in <module> requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001)注意
timeout?僅對(duì)連接過程有效,與響應(yīng)體的下載無關(guān)。?timeout?并不是整個(gè)下載響應(yīng)的時(shí)間限制,而是如果服務(wù)器在?timeout?秒內(nèi)沒有應(yīng)答,將會(huì)引發(fā)一個(gè)異常(更精確地說,是在timeout?秒內(nèi)沒有從基礎(chǔ)套接字上接收到任何字節(jié)的數(shù)據(jù)時(shí))If no timeout is specified explicitly, requests do not time out.
錯(cuò)誤與異常
遇到網(wǎng)絡(luò)問題(如:DNS 查詢失敗、拒絕連接等)時(shí),Requests 會(huì)拋出一個(gè)?ConnectionError?異常。
如果 HTTP 請(qǐng)求返回了不成功的狀態(tài)碼,?Response.raise_for_status()?會(huì)拋出一個(gè)?HTTPError異常。
若請(qǐng)求超時(shí),則拋出一個(gè)?Timeout?異常。
若請(qǐng)求超過了設(shè)定的最大重定向次數(shù),則會(huì)拋出一個(gè)?TooManyRedirects?異常。
所有Requests顯式拋出的異常都繼承自?requests.exceptions.RequestException?。
轉(zhuǎn)載于:https://www.cnblogs.com/StaYWARM/p/7604286.html
總結(jié)
以上是生活随笔為你收集整理的requests基础3的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件操作---with语句
- 下一篇: 010-ThreadGroup线程组