Python请求:在post请求中使用不同的主体类型参数
在阅读Python的Python请求:在post请求中使用不同的主体类型参数,python,post,Python,Post,在阅读Python的请求库时,基本请求函数的API有几个看似冗余的参数: 数据--(可选)要在请求正文中发送的元组[(键、值)](将进行形式编码)、字节或类似文件的对象的字典或列表 json——(可选)在请求体中发送的json数据 文件--(可选)用于多部分编码上载的“名称”字典:类文件对象(或{“名称”:文件元组})。文件元组可以是2元组('filename',fileobj')、3元组('filename',fileobj',content_type')或4元组('filename',fil
请求
库时,基本请求函数的API有几个看似冗余的参数:
数据--(可选)要在请求正文中发送的元组[(键、值)](将进行形式编码)、字节或类似文件的对象的字典或列表
json——(可选)在请求体中发送的json数据
文件--(可选)用于多部分编码上载的“名称”字典:类文件对象(或{“名称”:文件元组})。文件元组可以是2元组('filename',fileobj')、3元组('filename',fileobj',content_type')或4元组('filename',fileobj',content_type',custom_headers),其中'content type'是定义给定文件内容类型的字符串,custom_headers是一个类似dict的对象,包含要为文件添加的附加头
界面的其余部分也是如此,例如post、get等。我觉得这有点令人困惑
假设我正试图将文件发送到某个端点,并给出如何使用它们的说明。我是否有任何理由不将所有内容都塞进数据参数中,而不是使用文件、json等
换言之,以下各项之间是否有任何区别:
requests.post('http://some.api.endpoint',
data={'command': 'foo',
'options': {'the_thing':'gimmie', 'the_answer': 42},
'the_file': open('myfile.pdf', 'rb')})
对
requests.post('http://some.api.endpoint',
data={'command': 'foo'},
json=json.dumps({'options': {'the_thing':'gimmie', 'the_answer': 42}}),
files={'the_file': open('myfile.pdf', 'rb')})
对文档中引用的部分最自然的解读是,这两个调用将是等效的
也许我误读了数据参数的文档,它不能接受文件字典?我有点不清楚。
数据的文档解释是指“字典或列表[三元组、字节或类似文件的对象]”,还是指“[字典或元组列表]、字节或类似文件的对象”?两者在语法上都有点不舒服。使用文件
参数状态“用于多部分编码上载”。当使用data
参数时,多部分http响应不是默认响应,因此这两个响应并不等效。看见
具体来说,使用files
参数生成一个multipart/form data
POST,而不是application/x-www-form-urlencoded
,在我看来,这意味着“(字典)或(元组列表),或(字节),或(其他)”。噢,这更有意义。我假设如果它允许文件和数据,多部分请求将是默认的。。。