Python 请求:在请求后使用不同的正文类型参数



阅读 Pythonrequests库的文档,基本请求函数的 API 有几个看似多余的参数:

data -- (可选)字典或元组列表 [(键、值)](将采用表单编码)、字节或类似文件的对象,以在请求正文中发送。

json -- (可选)要在请求正文中发送的 JSON 数据。

文件 -- (可选)字典 'name':类文件对象(或 {'name': file-tuple}),用于分段编码上传。 文件元组可以是 2 元组("文件名",fileobj)、3 元组("文件名",fileobj,"content_type")或 4 元组("文件名",fileobj,"content_type",custom_headers),其中"内容类型"是定义给定文件内容类型的字符串,custom_headers包含要为文件添加的其他标头的类似字典的对象。

接口的其余部分也是如此,例如,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 参数的文档,它不能接受文件字典? 我有点不清楚。data的文档解释是指"字典或列表[三元组、字节或类文件对象]],还是表示"[字典或元组列表]、字节或类文件对象? 两者都在语法上有点不舒服。

使用files参数表示"用于分段编码上传"。使用data参数时,多部分 http 响应不是默认的,因此两者并不等效。请参阅什么是 http 分段请求? 具体来说,使用files参数会生成一个multipart/form-dataPOST 而不是application/x-www-form-urlencoded

相关内容

最新更新