python webkitformboundary_python – 使用Multipart / form-data的POST请求.内容类型不正确

我们正在尝试用

python编写一个脚本(使用python-requests a.t.m.)来对内容必须是MultipartFormData的站点发出POST请求.

当我们手动执行此POST请求时(通过填写网站上的表单并发布),使用wireshark,这就出现了(简短版本):

Content-Type: multipart/form-data;

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

Data (8 Bytes)

John Doe

当我们尝试使用python-requests库来实现相同的结果时,会发送:

Content-Type: application/x-pandoplugin

Content-Disposition: form-data; name="name"; filename="name"\r\n

Media type: application/x-pandoplugin (12 Bytes)

//and then in this piece is what we posted://

John Doe

奇怪的是,数据包的“常规类型”确实是多部分/表单数据,但发送的单个项目(key =’name’,value =’John Doe’)具有类型application / x-pandoplugin(随机的)应用在我的电脑上我猜).

这是使用的代码:

response = s.post('http://url.com', files={'name': 'John Doe'})

有没有办法指定单个项的内容类型而不是使用headers参数(只更改’整个’数据包的类型)?

我们认为服务器没有正确响应,因为它无法理解我们发送它的内容类型.

小更新:

我认为多部分内容的不同部分现在与我在浏览器中执行POST时发送的部分相同,所以这很好.服务器实际上并没有执行我用脚本发送的更改.唯一不同的是不同部分的顺序.

例如,这是我的浏览器发送的内容:

Boundary: \r\n------WebKitFormBoundary3eXDYO1lG8Pgxjwj\r\n

Encapsulated multipart part: (text/plain)

Content-Disposition: form-data; name="file"; filename="ex.txt"\r\n

Content-Type: text/plain\r\n\r\n

Line-based text data: text/plain

lore ipsum blabbla

Boundary: \r\n------WebKitFormBoundary3eXDYO1lG8Pgxjwj\r\n

Encapsulated multipart part:

Content-Disposition: form-data; name="seq"\r\n\r\n

Data (2 bytes)

Boundary: \r\n------WebKitFormBoundary3eXDYO1lG8Pgxjwj\r\n

Encapsulated multipart part:

Content-Disposition: form-data; name="name"\r\n\r\n

Data (2 bytes)

这就是脚本(使用python-requests)发送的内容:

Boundary: \r\n------WebKitFormBoundary3eXDYO1lG8Pgxjwj\r\n

Encapsulated multipart part:

Content-Disposition: form-data; name="name"\r\n\r\n

Data (2 bytes)

Boundary: \r\n------WebKitFormBoundary3eXDYO1lG8Pgxjwj\r\n

Encapsulated multipart part: (text/plain)

Content-Disposition: form-data; name="file"; filename="ex.txt"\r\n

Content-Type: text/plain\r\n\r\n

Line-based text data: text/plain

lore ipsum blabbla

Boundary: \r\n------WebKitFormBoundary3eXDYO1lG8Pgxjwj\r\n

Encapsulated multipart part:

Content-Disposition: form-data; name="seq"\r\n\r\n

Data (2 bytes)

服务器是否可能依赖于部件的顺序?根据Multipart upload form: Is order guaranteed?,它显然是?如果是这样,是否可以使用请求库明确强制订单?

并且在这种情况下使事情变得更糟:文件和文本值混合在一起.

所以强迫订单似乎相当困难.这是我目前的做法:

s.post('http://www.url.com', files=files,data = form_values)

EDIT2:

我在requests插件中做了一个修改,以确保部件的顺序与原始请求中的顺序相同.这不能解决问题所以我想我的问题没有直接的解决方案.我会发送邮件给网站的开发者,希望他们可以帮助我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值