python使用带有请求的多部分/表单数据为POST设置边界

python使用带有请求的多部分/表单数据为POST设置边界,python,http,post,python-requests,Python,Http,Post,Python Requests,我想使用请求发送文件,但服务器使用设置为****的固定边界工作。我只能发送一个文件,但是请求模块会创建一个随机边界。如何覆盖它 import requests url='http://xxx.xxx.com/uploadfile.php' fichier= {'uploadedfile':open('1103290736_2016_03_23_13_32_55.zip','rb')} headers2={'Connection':'Keep-Alive','User-Agent':'Dalvi

我想使用请求发送文件,但服务器使用设置为
****
的固定边界工作。我只能发送一个文件,但是
请求
模块会创建一个随机边界。如何覆盖它

import requests

url='http://xxx.xxx.com/uploadfile.php'
fichier= {'uploadedfile':open('1103290736_2016_03_23_13_32_55.zip','rb')}
headers2={'Connection':'Keep-Alive','User-Agent':'Dalvik/1.6.0 (Linux; U; Android 4.4.2; S503+ Build/KOT49H)','Accept-Encoding':'gzip'}
session= requests.Session()
session.post(url,headers=headers2,files=fichier)
session.close()
天哪,那是一台坏得很厉害的服务器。如果可以,请修复服务器

你不能告诉
请求
选择什么边界。相反,您可以使用以下方法构建自己的
多部分/表单数据
有效负载:

设置
内容类型:多部分/表单数据;boundary=“****”
作为标题,主体使用
***
作为边界(带有适当的
--
前置和后置补丁)。

男孩,这是一个非常坏的服务器。如果可以,请修复服务器

你不能告诉
请求
选择什么边界。相反,您可以使用以下方法构建自己的
多部分/表单数据
有效负载:


设置
内容类型:多部分/表单数据;boundary=“****”
作为标题,主体使用
***
作为边界(使用适当的
--
前置和后置)。

使用一个简单的替代方法;下面的例子取自此:


然而,这引入了一个额外的依赖项,可以是。一个简单的替代方法是使用;下面的例子取自此:


但是,这引入了一个额外的依赖项,可以是。

您实际上可以直接使用请求模块来执行此操作:

files={'file':('filename',open('filename','rb'),'text/plain')}
body,content_type=requests.models.RequestEncodingMixin._encode_文件(文件,{})
#这样可以确保在中定义相同的边界
#多部分/表单数据内容类型标头
#表单数据
数据=主体
标题={
“内容类型”:内容类型
}
response=requests.post(
终点,
数据=数据,
标题=标题
)
这对我有用。否则我会遇到这样的错误:


“errorMessage”:“所需的请求部分“文件”不存在”

您实际上可以直接使用请求模块执行此操作:

files={'file':('filename',open('filename','rb'),'text/plain')}
body,content_type=requests.models.RequestEncodingMixin._encode_文件(文件,{})
#这样可以确保在中定义相同的边界
#多部分/表单数据内容类型标头
#表单数据
数据=主体
标题={
“内容类型”:内容类型
}
response=requests.post(
终点,
数据=数据,
标题=标题
)
这对我有用。否则我会遇到这样的错误:


“errorMessage”:“所需的请求部分‘文件’不存在”

这是一个非常坏的服务器。您不能改为修复服务器吗?您必须自己进行编码,并设置包含边界的
内容类型
标题。我知道如何设置内容类型,但不知道如何进行自己的编码。你能给出一个例子或链接,这是一个非常坏的服务器。您不能改为修复服务器吗?您必须自己进行编码,并设置包含边界的
内容类型
标题。我知道如何设置内容类型,但不知道如何进行自己的编码。你能给我一个例子或一个链接吗?你能给我一个字段的例子吗?我试过了,我得到了ValueError:数据不能是字符串,我经历过了你测试过这个吗?它似乎没有按预期的那样工作。我只是尝试了一下,我得到了一个不同的边界在身体比在标题。类似于链接github问题的顶部。您能给我一个字段的示例吗,我尝试了它,得到了ValueError:数据不能是字符串,我经历过了你测试过这个吗?它似乎没有按预期的那样工作。我只是尝试了一下,我得到了一个不同的边界在身体比在标题。类似于链接github问题的顶部。
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

related = MIMEMultipart('form-data', '*****')  # second argument is the boundary.
file_part = MIMEApplication(
    open('1103290736_2016_03_23_13_32_55.zip', 'rb').read(),
    # optional: set a subtype: 'zip',
)
file_part.add_header('Content-disposition', 'form-data; name="uploadedfile"')
related.attach(file_part)

body = related.as_string().split('\n\n', 1)[1]
headers = dict(related.items())
headers['User-Agent'] = 'Dalvik/1.6.0 (Linux; U; Android 4.4.2; S503+ Build/KOT49H)'

r = session.post(url, data=body, headers=headers)
from requests_toolbelt import MultipartEncoder

fields = {
# your multipart form fields
}

m = MultipartEncoder(fields, boundary='my_super_custom_header')
r = requests.post(url, headers={'Content-Type': m.content_type}, data=m.to_string())