httpx 多部分文件編碼

2022-07-26 14:38 更新

快速入門中所述,可以通過將包含有效負載名稱的字典作為鍵傳遞,并將元素元組或類似文件的對象或字符串作為值來使用多部分文件編碼。

>>> 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 ...>"
  },
  ...
}

更具體地說,如果將元組用作值,則它必須具有 2 到 3 個元素:

  • 第一個元素是可選文件名,可以設置為?None ?。
  • 第二個元素可以是類似文件的對象或字符串,它將以? UTF-8 ?自動編碼。
  • 可選的第三個元素可用于指定要上載的文件的 MIME 類型。如果未指定,HTTPX 將嘗試根據(jù)文件名猜測 MIME 類型,未知文件擴展名默認為“?application/octet-stream?”。如果文件名顯式設置為?None?,則 HTTPX 將不包含內(nèi)容類型 MIME 標頭字段。
>>> files = {'upload-file': (None, 'text content', 'text/plain')}
>>> r = httpx.post("https://httpbin.org/post", files=files)
>>> print(r.text)
{
  ...
  "files": {},
  "form": {
    "upload-file": "text-content"
  },
  ...
}
提示
以這種方式上傳大文件是安全的。默認情況下,文件上傳是流式傳輸?shù)?,這意味著一次只有一個塊將加載到內(nèi)存中。

通過將非文件數(shù)據(jù)字段傳遞給?data=... ?,可以使用它們包含在多部分表單中。

您還可以使用多文件字段表單一次性發(fā)送多個文件。為此,請傳遞?(field, <file>)?項目列表而不是字典,從而允許您傳遞具有相同?field ?.例如,此請求發(fā)送 2 個文件,?foo.png?和?bar.png?并在images表單字段上的一個請求中發(fā)送:

>>> files = [('images', ('foo.png', open('foo.png', 'rb'), 'image/png')),
                      ('images', ('bar.png', open('bar.png', 'rb'), 'image/png'))]
>>> r = httpx.post("https://httpbin.org/post", files=files)


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號