我试图异步发送一些多部分编码的表单数据作为发布请求,主要是一个文件和其他两个字段。
在尝试使用 asyncio 之前,我正在使用 requests-toolbelt MultipartEncoder( https://github.com/requests/toolbelt )同步执行该过程,这对于普通请求非常有效,但在使用 aiohttp 进行异步时不起作用。aiohttp 提供了 2 个多部分类,一个FormData()类和一个MultipartWriter()类,这两个类都没有给我带来很大的成功。
经过一些测试,似乎不同之处在于,当我使用工具带时MultipartEncoder(),请求会form在发布请求的部分按原样发送数据。但是,当使用 aiohttp 时,请求被放入请求的body部分。不知道为什么他们的行为不同
def multipartencode() -> ClientResponse():
# Using MultipartEncoder
m = MultipartEncoder(
fields={'type': type_str,
'metadata': json.dumps(metadata),
'file': (filename, file, 'application/json')}
)
# Using FormData
data = FormData()
data.add_field('file', file, filename=filename,
content_type='multipart/form-data')
data.add_field('type', type_str, content_type='multipart/form-data')
data.add_field('metadata', json.dumps(metadata),
content_type='multipart/form-data')
# Using MultipartWriter
with MultipartWriter('multipart/form-data') as mpwriter:
part = mpwriter.append(
file, {'CONTENT-TYPE': 'multipart/form-data'})
part.set_content_disposition('form-data')
part = mpwriter.append_form([('type', type_str)]) …Run Code Online (Sandbox Code Playgroud) python multipartform-data python-requests python-asyncio aiohttp