当前位置: 首页 > 知识库问答 >
问题:

python请求-在HTTP请求中发布不带文件名的多部分/表单数据

公孙胡媚
2023-03-14

我试图复制下面的POST请求使用Python中的请求模块:

POST /example/asdfas HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------241652170216373
Content-Length: 279

-----------------------------241652170216373
Content-Disposition: form-data; name="value_1"

12345
-----------------------------241652170216373
Content-Disposition: form-data; name="value_2"

67890
-----------------------------241652170216373--

请求文档建议使用files参数。

当我尝试以下呼叫:

import requests
requests.post('http://example.com/example/asdfas', files={'value_1': '12345', 
                                                          'value_2': '67890'})

我得到以下HTTP请求:

'Accept': '*/*', 
'Accept-Encoding': 'gzip, deflate, compress', 
'Content-Length': '264', 
'User-Agent': 'python-requests/2.2.1 CPython/3.3.2 Windows/7', 
'Content-Type': 'multipart/form-data; boundary=273f13699c02429db4eb95c97f757d38'
--273f13699c02429db4eb95c97f757d38
Content-Disposition: form-data; name="value_1"; filename="value_1"

12345
--273f13699c02429db4eb95c97f757d38
Content-Disposition: form-data; name="value_2"; filename="value_2"

67890
--273f13699c02429db4eb95c97f757d38--

我还尝试使用数据参数:

import requests
requests.post('http://example.com/example/asdfas', data={'value_1': '12345', 
                                                         'value_2': '67890'})

导致以下HTTP请求:

'Content-Type': 'application/x-www-form-urlencoded', 
'Content-Length': '27', 
'User-Agent': 'python-requests/2.2.1 CPython/3.3.2 Windows/7', 
'Accept': '*/*', 
'Accept-Encoding': 'gzip, deflate, compress'
value_2=67890&value_1=12345

我遇到的问题是,使用files参数会导致服务器无法识别调用,可能是由于HTTP请求中发送了意外的“filename”信息。使用数据参数发送错误的内容类型标题。

已知第一个请求正在我希望将请求发送到的服务器上工作-相同地复制第一个HTTP请求的正确函数调用是什么?

编辑:复制工作请求的超文本标记语言表单示例:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <form action="http://example.com/example/asdfas" method="post" enctype="multipart/form-data">
        <label for="v1">Value 1</label>
        <input id="v1" type="text" name="value_1">
        <label for="v2">Value 2</label>
        <input id="v2" type="text" name="value_2">
        <input type="submit">
    </form>
</body>
</html>

共有2个答案

沈博涉
2023-03-14
import requests
from requests_toolbelt import MultipartEncoder

url = 'http://example.com/example/asdfas'
fields = {'value_1':'12345', 'value_2': '67890'}

data = MultipartEncoder(fields=fields)
headers["Content-type"] = m.content_type

requests.post(url=url, data=data, headers=headers)
罗智志
2023-03-14

解决方法是在向file参数传递参数时使用元组:

import requests
requests.post('http://example.com/example/asdfas', files={'value_1': (None, '12345'), 'value_2': (None, '67890')})

按预期工作:

'Accept': '*/*', 
'Accept-Encoding': 'gzip, deflate, compress', 
'Content-Length': '228', 
'User-Agent': 'python-requests/2.2.1 CPython/3.3.2 Windows/7', 
'Content-Type': 'multipart/form-data; boundary=85e90a4bbb05474ca1e23dbebdd68ed9'

--85e90a4bbb05474ca1e23dbebdd68ed9
Content-Disposition: form-data; name="value_1"

12345
--85e90a4bbb05474ca1e23dbebdd68ed9
Content-Disposition: form-data; name="value_2"

67890
--85e90a4bbb05474ca1e23dbebdd68ed9--
 类似资料:
  • 问题内容: 我需要进行API调用,以上传文件以及带有有关文件详细信息的JSON字符串。 我正在尝试使用python请求库来执行此操作: 这将引发以下错误: 如果我从请求中删除“文件”,则它可以工作。 如果我从请求中删除了“数据”,它将起作用。 如果我不将数据编码为JSON,则可以使用。 因此,我认为错误与在同一请求中发送JSON数据和文件有关。 关于如何使它工作的任何想法? 问题答案: 不要使用j

  • 如何用Python发送带有请求的?如何发送一个文件,我明白,但如何发送表单数据的方法不能理解。

  • 我仍然对上传文件的不同方法感到困惑。后端服务器不在我的控制之下,但我可以使用Swagger page或Postman上传文件。这意味着服务器运行正常。但当我使用AngularJS进行上传时,它不起作用。 以下是使用Postman进行测试的方法。我只是在使用表单数据: 请注意,请求头的内容类型为多部分/表单数据。但是请求负载具有文件名和内容类型,即image/png。 这是我的代码: 参数只是图像数

  • 问题内容: 我正在使用请求库编写Web Service客户端。我正在包含文件和text-json的multipart / form- data中获取数据。我不知道如何解析它。是否有合适的库可以解析python中的multipart / form-data格式,还是我应该自己编写解析器? 我的代码: b’\ r \ n–c00750d1-8ce4-4d29-8390-b50bf02a92cc \ r

  • 在我正在开发的React web应用程序中,有一个包含一些用户数据的文件上传部分。然而,当我试图上传文件时,服务器抛出以下错误。 组织。阿帕奇。公猫util。http。文件上传。FileUploadException:请求被拒绝,因为找不到多部分边界 反应侧 我的Spring Boot控制器如下所示。

  • 问题内容: 我正在编写一个RESTful API。我在使用不同的动词上载图像时遇到麻烦。 考虑: 我有一个对象,可以通过对URL的发布/放置/删除/获取请求来创建/修改/删除/查看。如果有要上载的文件,则请求是多部分形式;如果只有文本要处理,则请求是application / xml。 为了处理与对象相关的图像上传,我正在做类似的事情: 这里的主要问题是在尝试处理放置请求时,显然$ _POST不包