首頁 - 柑橘百科 > HTTPX 基礎(chǔ)教程

HTTPX 基礎(chǔ)教程

發(fā)布于:2023-04-20 作者:admin 閱讀:98
󦘖

微信號(hào)

WWW2450711172

添加微信

加速已經(jīng)起頭

詳細(xì)來說,詳細(xì)來說引入 HTTPX:

>>> import httpx

那時(shí),讓他們?cè)囍垣@取兩個(gè)頁面。

>>> r = httpx.get(https://httpbin.org/get)>>> r<Response [200 OK]>

反之亦然,發(fā)出HTTP POST許諾:

>>> r = httpx.post(https://httpbin.org/post, data={key: value})

PUT,DELETE,HEAD和OPTIONS許諾都遵從完全不異的式樣:

>>> r = httpx.put(https://httpbin.org/put, data={key: value})>>> r = httpx.delete(https://httpbin.org/delete)>>> r = httpx.head(https://httpbin.org/get)>>> r = httpx.options(https://httpbin.org/get)在URL中傳達(dá)模塊

要在許諾中次要包羅URL查閱模塊,請(qǐng)接納 paramsURL:

>>> params = {key1: value1, key2: value2}>>> r = httpx.get(https://httpbin.org/get, params=params)

要查閱那些值如何代碼為URL數(shù)組,他們能查抄和用做T7 *** 的結(jié)論URL:

>>> r.urlURL(https://httpbin.org/get?key2=value2&key1=value1))

您還能將工程項(xiàng)目條目做為值傳達(dá):

>>> params = {key1: value1, key2: [value2, value3]}>>> r = httpx.get(https://httpbin.org/get, params=params)>>> r.urlURL(https://httpbin.org/get?key1=value1&key2=value2&key2=value3)積極響應(yīng)文檔

HTTPX將手動(dòng)處置將積極響應(yīng)文檔音頻為Unicode文檔。

>>> r = httpx.get(https://www.example.org/)>>> r.text<!doctype html>\n<html>\n<head>\n<title>Example Domain</title>...

您能查抄和已接納何種代碼來音頻積極響應(yīng)。

>>> r.encodingUTF-8

假設(shè)您必要全面籠蓋國際尺度立功行為并了了增設(shè)要接納的代碼,則也能那種做。

>>> r.encoding = *** O-8859-1十進(jìn)造積極響應(yīng)文檔

對(duì)非文檔積極響應(yīng),積極響應(yīng)文檔也能十進(jìn)造體例出訪:

>>> r.contentb<!doctype html>\n<html>\n<head>\n<title>Example Domain</title>...

任何 gzip和 deflateHTTP積極響應(yīng)代碼城市手動(dòng)為您音頻。假設(shè) brotlipy已安拆,則 brotli還將撐持積極響應(yīng)代碼。

例如,要按照許諾返回的十進(jìn)造數(shù)據(jù)創(chuàng)建圖像,能接納以下代碼:

>>> from PIL import Image>>> from io import BytesIO>>> i = Image.open(BytesIO(r.content))返回 *** ON 積極響應(yīng)文檔

凡是,Web API 積極響應(yīng)將被代碼為 *** ON。

>>> r = httpx.get(https://api.github.com/events)>>> r.json()[{urepository: {uopen_issues: 0, uurl: https://github.com/... ... }}]自定義 Headers

要在傳出許諾中包羅其他標(biāo)頭,請(qǐng)接納 headersURL模塊:

>>> url = http://httpbin.org/headers>>> headers = {user-agent: my-app/0.0.1}>>> r = httpx.get(url, headers=headers)發(fā)送表單數(shù)據(jù)

某些類型的HTTP許諾(例如 POST和 PUT許諾)能在許諾注釋中包羅數(shù)據(jù)。一種常見的添加體例是做為表單代碼數(shù)據(jù),用做HTML表單。

>>> data = {key1: value1, key2: value2}>>> r = httpx.post("https://httpbin.org/post", data=data)>>> print(r.text){..."form": {"key2": "value2","key1": "value1"},...}

表單代碼的數(shù)據(jù)還能次要包羅給定鍵的多個(gè)值。

>>> data = {key1: [value1, value2]}>>> r = httpx.post("https://httpbin.org/post", data=data)>>> print(r.text){..."form": {"key1": ["value1","value2"]},...}發(fā)送分段文件上傳

您還能接納HTTP分段代碼上傳文件:

>>> files = {upload-file: open(report.xls, rb)}>>> r = httpx.post("https://httpbin.org/post", files=files)>>> print(r.text){..."files": {"upload-file": "<... binary content ...>"},...}

您還能通過接納工程項(xiàng)目元組做為文件值來顯式增設(shè)文件名和文檔類型:

>>> files = {upload-file: (report.xls, open(report.xls, rb), application/vnd.ms-excel)}>>> r = httpx.post("https://httpbin.org/post", files=files)>>> print(r.text){..."files": {"upload-file": "<... binary content ...>"},...}發(fā)送 *** ON 代碼數(shù)據(jù)

假設(shè)您只必要兩個(gè)簡單的鍵值數(shù)據(jù)構(gòu)造,就能接納表單代碼的數(shù)據(jù)。對(duì)更復(fù)雜的數(shù)據(jù)構(gòu)造,您凡是必要改用 *** ON代碼。

>>> data = {integer: 123, boolean: True, list: [a, b, c]}>>> r = httpx.post("https://httpbin.org/post", json=data)>>> print(r.text){..."json": {"boolean": true,"integer": 123,"list": ["a","b","c"]},...}發(fā)送十進(jìn)造許諾數(shù)據(jù)

對(duì)其他代碼,應(yīng)接納 bytesyield 的類型或生成器 bytes。

Content-Type在上傳十進(jìn)造數(shù)據(jù)時(shí),您可能還必要增設(shè)自定義標(biāo)頭。

HTTPX 基礎(chǔ)教程

積極響應(yīng)形態(tài)碼

他們能查抄和積極響應(yīng)的HTTP形態(tài)代碼:

>>> r = httpx.get(https://httpbin.org/get)>>> r.status_code200

HTTPX還次要包羅兩個(gè)簡單的快速體例,用做通過其文檔短語出訪形態(tài)代碼。

>>> r.status_code == httpx.codes.OKTrue

他們能針對(duì)任何客戶端或辦事器錯(cuò)誤積極響應(yīng)(4xx或5xx形態(tài)代碼)引發(fā)異常:

>>> not_found = httpx.get(https://httpbin.org/status/404)>>> not_found.status_code404>>> not_found.raise_for_status()Traceback (most recent call last):File "/Users/tomchristie/GitHub/encode/httpcore/httpx/models.py", line 776, in raise_for_statusraise HttpError(message)httpx.exceptions.HttpError: 404 Not Found

任何勝利的積極響應(yīng)代碼都將簡單地返回 None而不是引發(fā)異常。

>>> r.status_code == httpx.codes.OKTrue積極響應(yīng) Headers

積極響應(yīng)標(biāo)頭可做為類似于字典的接口接納。

>>> r.headersHeaders({content-encoding: gzip,transfer-encoding: chunked,connection: close,server: nginx/1.0.4,x-runtime: 148ms,etag: "e1ca502697e5c9317743dc078f67693f",content-type: application/json})

該 Headers數(shù)據(jù)類型是不區(qū)分大小寫的,所以你能接納任何本錢。

>>> r.headers[Content-Type]application/json>>> r.headers.get(content-type)application/json

按照RFC 7230,單個(gè)積極響應(yīng) headers 的多個(gè)值暗示為單個(gè)逗號(hào)分隔的值:

領(lǐng)受者能通過將每個(gè)隨后的字段值按挨次附加到合并的字段值上,并用下列分隔符分隔,將多個(gè)具有完全不異字段名的頭字段組合成一對(duì)“字段名:字段值”,而不會(huì)改動(dòng)動(dòng)靜的語義。逗號(hào)。流積極響應(yīng)

對(duì)大型下載,您可能必要接納不將整個(gè)積極響應(yīng)主體立即加載到內(nèi)存中的流式積極響應(yīng)。

您能流式傳輸積極響應(yīng)的十進(jìn)造文檔...

>>> with httpx.stream("GET", "https://www.example.com") as r:... for data in r.iter_bytes():... print(data)

或回應(yīng)文字...

>>> with httpx.stream("GET", "https://www.example.com") as r:... for text in r.iter_text():... print(text)

或逐行流文檔...

>>> with httpx.stream("GET", "https://www.example.com") as r:... for line in r.iter_lines():... print(line)

HTTPX將接納通用行結(jié)尾,將所有情況國際尺度化為 \n。

在某些情況下,您可能希望在不該用任何HTTP文檔音頻的情況下出訪積極響應(yīng)上的原始十進(jìn)造。在那種情況下的任何文檔代碼web辦事器已諸如施加 gzip, deflate或 brotli將不會(huì)手動(dòng)音頻。

HTTPX 基礎(chǔ)教程

>>> with httpx.stream("GET", "https://www.example.com") as r:... for chunk in r.iter_raw():... print(chunk)

假設(shè)您以上述任何一種體例接納流式積極響應(yīng),則 response.contentand response.text屬性將不成用,而且假設(shè)出訪將引發(fā)錯(cuò)誤。但是,您還能接納積極響應(yīng)流功用來有前提地加載積極響應(yīng)主體:

>>> with httpx.stream("GET", "https://www.example.com") as r:... if r.headers[Content-Length] < TOO_LONG:... r.read()... print(r.text)Cookies

能輕松出訪積極響應(yīng)中增設(shè)的任何cookie:

HTTPX 基礎(chǔ)教程

>>> r = httpx.get(http://httpbin.org/cookies/set?chocolate=chip, allow_redirects=False)>>> r.cookies[chocolate]chip

要將Cookie包羅在外發(fā)許諾中,請(qǐng)接納 cookies模塊:

>>> cookies = {"peanut": "butter"}>>> r = httpx.get(http://httpbin.org/cookies, cookies=cookies)>>> r.json(){cookies: {peanut: butter}}

Cookie是在 Cookies實(shí)例中返回的,該實(shí)例是一品種似dict的數(shù)據(jù)構(gòu)造,帶有用做按其域或途徑出訪Cookie的其他API。

>>> cookies = httpx.Cookies()>>> cookies.set(cookie_on_domain, hello, there!, domain=httpbin.org)>>> cookies.set(cookie_off_domain, nope., domain=example.org)>>> r = httpx.get(http://httpbin.org/cookies, cookies=cookies)>>> r.json(){cookies: {cookie_on_domain: hello, there!}}url 重定向 和 汗青

默認(rèn)情況下,HTTPX將對(duì)重定向施行除 HEAD許諾之外的任何 *** 做。

history積極響應(yīng)的屬性可用做查抄和所有后續(xù)重定向。它包羅遵從它們的挨次的所有重定向積極響應(yīng)的條目。

例如,GitHub將所有HTTP許諾重定向到HTTPS。

>>> r = httpx.get(http://github.com/)>>> r.urlURL(https://github.com/)>>> r.status_code200>>> r.history[<Response [301 Moved Permanently]>]

您能接納allow_redirects模塊修改默認(rèn)的重定向處置:

>>> r = httpx.get(http://github.com/, allow_redirects=False)>>> r.status_code301>>> r.history[]

假設(shè)要發(fā)出 HEAD許諾,則能接納它來啟用重定向:

>>> r = httpx.head(http://github.com/, allow_redirects=True)>>> r.urlhttps://github.com/>>> r.history[<Response [301 Moved Permanently]>]超不時(shí)間

HTTPX默認(rèn)為所有收集 *** 做都次要包羅合理的超時(shí),那意味著,假設(shè)未準(zhǔn)確成立毗連,則它應(yīng)始末引發(fā)錯(cuò)誤而不是無期限地掛起。

收集不活動(dòng)的默認(rèn)超時(shí)為五秒。您能將值修改為或多或少嚴(yán)酷:

>>> httpx.get(https://github.com/, timeout=0.001)

您還能完全禁用超時(shí)立功行為...

>>> httpx.get(https://github.com/, timeout=None)

有關(guān)高級(jí)超時(shí)辦理,請(qǐng)參閱“ 超時(shí)微調(diào)”。

認(rèn)證體例

HTTPX撐持根本和摘要HTTP身份驗(yàn)證。

要供給根本身份驗(yàn)證根據(jù),請(qǐng)將2個(gè)元組的純文檔 str或 bytes對(duì)象做為 auth模塊傳達(dá)給許諾函數(shù):

>>> httpx.get("https://example.com", auth=("my_user", "password123"))

要供給摘要式身份驗(yàn)證的根據(jù),您必要 DigestAuth接納純文檔用戶名和密碼做為模塊實(shí)例化兩個(gè)對(duì)象。然后能將該對(duì)象做為 auth模塊傳達(dá)給上述許諾辦法:

>>> auth = httpx.DigestAuth("my_user", "password123")>>> httpx.get("https://example.com", auth=auth)<Response [200 OK]>

http://weixin. *** .com/r/NCgDG8LEpZ-arYZ4930m (二維碼手動(dòng)識(shí)別)

󦘖

微信號(hào)

WWW2450711172

添加微信
二維碼

掃一掃關(guān)注我們

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如果發(fā)現(xiàn)本站有涉嫌抄襲的內(nèi)容,歡迎發(fā)送郵件至 201825640@qq.com舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)文章

發(fā)表評(píng)論

二維碼
柑橘新品種

電話咨詢
柑橘技術(shù)

微信咨詢

微信號(hào)復(fù)制成功

打開微信,點(diǎn)擊右上角"+"號(hào),添加朋友,粘貼微信號(hào),搜索即可!