<p>自从以前的答案写好后,请求就变了。查看<a href="https://github.com/kennethreitz/requests/issues/1081" rel="noreferrer">bug thread at Github</a>以获取更多详细信息,并查看<a href="https://github.com/kennethreitz/requests/issues/1081#issuecomment-32956681" rel="noreferrer">this comment</a>以获取示例。</p>
<p>简而言之,files参数采用<code>dict</code>,键是表单字段的名称,值是字符串或2、3或4长度的元组,如请求快速启动中的<a href="http://docs.python-requests.org/en/latest/user/quickstart/#post-a-multipart-encoded-file" rel="noreferrer">POST a Multipart-Encoded File</a>部分所述:</p>
<pre><code>>>> url = 'http://httpbin.org/post'
>>> files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
</code></pre>
<p>在上面,元组的组成如下:</p>
<pre><code>(filename, data, content_type, headers)
</code></pre>
<p>如果值只是一个字符串,则文件名将与键相同,如下所示:</p>
<pre><code>>>> files = {'obvius_session_id': '72c2b6f406cdabd578c5fd7598557c52'}
Content-Disposition: form-data; name="obvius_session_id"; filename="obvius_session_id"
Content-Type: application/octet-stream
72c2b6f406cdabd578c5fd7598557c52
</code></pre>
<p>如果值是元组,并且第一个条目是<code>None</code>,则不包括filename属性:</p>
<pre><code>>>> files = {'obvius_session_id': (None, '72c2b6f406cdabd578c5fd7598557c52')}
Content-Disposition: form-data; name="obvius_session_id"
Content-Type: application/octet-stream
72c2b6f406cdabd578c5fd7598557c52
</code></pre>