首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在python中发送带有请求的"multipart/form-data“?

如何在python中发送带有请求的"multipart/form-data“?
EN

Stack Overflow用户
提问于 2012-09-12 17:33:23
回答 10查看 420.6K关注 0票数 298

如何在python中发送带有requestsmultipart/form-data?怎么发送文件,我懂,但是怎么用这种方法发送表单数据就不懂了。

EN

回答 10

Stack Overflow用户

发布于 2014-04-10 05:50:46

自从编写了之前的一些答案后,请求发生了变化。有关更多详细信息,请查看this Issue on Github,并查看this comment示例。

简而言之,files参数接受一个字典,其键是表单域的名称,值是字符串或者2、3或4长度的元组,如Requests quickstart中的POST a Multipart-Encoded File小节所述:

代码语言:javascript
复制
>>> url = 'http://httpbin.org/post'
>>> files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}

在上面的代码中,元组的组成如下:

代码语言:javascript
复制
(filename, data, content_type, headers)

如果值只是一个字符串,则文件名将与键相同,如下所示:

代码语言:javascript
复制
>>> files = {'obvius_session_id': '72c2b6f406cdabd578c5fd7598557c52'}

Content-Disposition: form-data; name="obvius_session_id"; filename="obvius_session_id"
Content-Type: application/octet-stream

72c2b6f406cdabd578c5fd7598557c52

如果该值是一个元组,并且第一个条目为None,则不包括filename属性:

代码语言:javascript
复制
>>> files = {'obvius_session_id': (None, '72c2b6f406cdabd578c5fd7598557c52')}

Content-Disposition: form-data; name="obvius_session_id"
Content-Type: application/octet-stream

72c2b6f406cdabd578c5fd7598557c52
票数 121
EN

Stack Overflow用户

发布于 2019-01-24 05:59:55

下面是使用请求上传带有附加参数的单个文件的简单代码片段:

代码语言:javascript
复制
url = 'https://<file_upload_url>'
fp = '/Users/jainik/Desktop/data.csv'

files = {'file': open(fp, 'rb')}
payload = {'file_id': '1234'}

response = requests.put(url, files=files, data=payload, verify=False)

请注意,您不需要显式指定任何内容类型。

注:我想对上述答案之一发表评论,但由于口碑不高,所以在这里起草了新的回复。

票数 18
EN

Stack Overflow用户

发布于 2018-05-01 19:29:02

您需要使用站点的超文本标记语言中的上载文件的name属性。示例:

代码语言:javascript
复制
autocomplete="off" name="image">

你看到name="image">了吗?您可以在用于上传文件的站点的HTML中找到它。您需要使用它通过Multipart/form-data上传文件

脚本:

代码语言:javascript
复制
import requests

site = 'https://prnt.sc/upload.php' # the site where you upload the file
filename = 'image.jpg'  # name example

在这里,在图像的位置添加HTML格式的上传文件的名称

代码语言:javascript
复制
up = {'image':(filename, open(filename, 'rb'), "multipart/form-data")}

如果上传需要点击上传按钮,可以这样使用:

代码语言:javascript
复制
data = {
     "Button" : "Submit",
}

然后启动请求

代码语言:javascript
复制
request = requests.post(site, files=up, data=data)

完成后,文件上传成功

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12385179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档