Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python请求:在post请求中使用不同的主体类型参数_Python_Post - Fatal编程技术网

Python请求:在post请求中使用不同的主体类型参数

Python请求:在post请求中使用不同的主体类型参数,python,post,Python,Post,在阅读Python的请求库时,基本请求函数的API有几个看似冗余的参数: 数据--(可选)要在请求正文中发送的元组[(键、值)](将进行形式编码)、字节或类似文件的对象的字典或列表 json——(可选)在请求体中发送的json数据 文件--(可选)用于多部分编码上载的“名称”字典:类文件对象(或{“名称”:文件元组})。文件元组可以是2元组('filename',fileobj')、3元组('filename',fileobj',content_type')或4元组('filename',fil

在阅读Python的
请求
库时,基本请求函数的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

在我看来,这意味着“(字典)或(元组列表),或(字节),或(其他)”。噢,这更有意义。我假设如果它允许文件和数据,多部分请求将是默认的。。。