如何在python中发送带有requests
的multipart/form-data
?怎么发送文件,我懂,但是怎么用这种方法发送表单数据就不懂了。
发布于 2014-04-10 05:50:46
自从编写了之前的一些答案后,请求发生了变化。有关更多详细信息,请查看this Issue on Github,并查看this comment示例。
简而言之,files
参数接受一个字典,其键是表单域的名称,值是字符串或者2、3或4长度的元组,如Requests quickstart中的POST a Multipart-Encoded File小节所述:
>>> url = 'http://httpbin.org/post'
>>> files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
在上面的代码中,元组的组成如下:
(filename, data, content_type, headers)
如果值只是一个字符串,则文件名将与键相同,如下所示:
>>> 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属性:
>>> files = {'obvius_session_id': (None, '72c2b6f406cdabd578c5fd7598557c52')}
Content-Disposition: form-data; name="obvius_session_id"
Content-Type: application/octet-stream
72c2b6f406cdabd578c5fd7598557c52
发布于 2019-01-24 05:59:55
下面是使用请求上传带有附加参数的单个文件的简单代码片段:
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)
请注意,您不需要显式指定任何内容类型。
注:我想对上述答案之一发表评论,但由于口碑不高,所以在这里起草了新的回复。
发布于 2018-05-01 19:29:02
您需要使用站点的超文本标记语言中的上载文件的name
属性。示例:
autocomplete="off" name="image">
你看到name="image">
了吗?您可以在用于上传文件的站点的HTML中找到它。您需要使用它通过Multipart/form-data
上传文件
脚本:
import requests
site = 'https://prnt.sc/upload.php' # the site where you upload the file
filename = 'image.jpg' # name example
在这里,在图像的位置添加HTML格式的上传文件的名称
up = {'image':(filename, open(filename, 'rb'), "multipart/form-data")}
如果上传需要点击上传按钮,可以这样使用:
data = {
"Button" : "Submit",
}
然后启动请求
request = requests.post(site, files=up, data=data)
完成后,文件上传成功
https://stackoverflow.com/questions/12385179
复制相似问题