POST一個多部分編碼(Multipart-Encoded)的文件


Requests使得上傳多部分編碼文件變得很簡單:

    >>> url = 'http://httpbin.org/post'  
    >>> files = {'file': open('report.xls', 'rb')}  
      
    >>> r = requests.post(url, files=files)  
    >>> r.text  
    {  
      ...  
      "files": {  
        "file": "<censored...binary...data>"  
      },  
      ...  
    }  

你可以顯式地設置文件名,文件類型和請求頭:

    >>> url = 'http://httpbin.org/post'  
    >>> files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}  
      
    >>> r = requests.post(url, files=files)  
    >>> r.text  
    {  
      ...  
      "files": {  
        "file": "<censored...binary...data>"  
      },  
      ...  
    }  

如果你想,你也可以發送作為文件來接收的字符串:

 

>>> url = 'http://httpbin.org/post'
>>> files = {'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')}

>>> r = requests.post(url, files=files)
>>> r.text
{
  ...
  "files": {
    "file": "some,data,to,send\\nanother,row,to,send\\n"
  },
  ...
}

 

流式上傳

Requests支持流式上傳,這允許你發送大的數據流或文件而無需先把它們讀入內存。要使用流式上傳,僅需為你的請求體提供一個類文件對象即可:

    with open('massive-body') as f:  
        requests.post('http://some.url/streamed', data=f)  

 

 

另外:

Requests本身雖然提供了簡單的方法POST多部分編碼(Multipart-Encoded)的文件,但是Requests是先讀取文件到內存中,然后再構造請求發送出去。

如果需要發送一個非常大的文件作為 multipart/form-data 請求時,為了避免把大文件讀取到內存中,我們就希望將請求做成數據流。

默認requests是不支持的(或很困難), 這時需要用到第三方包requests-toolbelt

兩個庫POST多部分編碼(Multipart-Encoded)的文件示例代碼分別如下:

1. Requests庫(先讀取文件至內存中)

import requests
 
url = 'http://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}
 
r = requests.post(url, files=files)
print r.text

2. Requests+requests-toolbelt庫(直接發送數據流)

import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
 
m = MultipartEncoder(
    fields={'field0': 'value', 'field1': 'value',
            'field2': ('upload.zip', open('upload.zip', 'rb'), 'application/zip')}
    )
 
r = requests.post('http://httpbin.org/post', data=m,
                  headers={'Content-Type': m.content_type})
print r.text

轉自:http://lovesoo.org/requests-post-multiple-part-encoding-multipart-encoded-file-format.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM