首页 > 解决方案 > 我应该如何将文本/纯数据传递给 python 的 requests.post?

问题描述

我正在尝试curl在 python 请求中转换此命令,但我不确定我应该如何传递数据:

curl -X POST -u "apikey:{apikey}" \
    --header "Content-Type: text/plain" \
    --data "some plain text data" \
    "{url}"

我试图直接传递字符串并对其进行编码,str.encode('utf-8')但出现错误 415Unsupported Media Type

这是我的代码:

text = "some random text"
resp = requests.post(url, data=text, headers={'Content-Type': 'text/plain'}, auth=('apikey', self.apikey))

[编辑]:解决方案是不在请求中指定标头

非常感谢!

标签: pythonpython-3.xhttppython-requests

解决方案


使用requests库时,通常最好不要使用关键字手动设置Content-Type标题。headers=

requests如果需要,将为您设置此标头(例如,发布 JSON 将始终生成Content-Type: application/json标头)。

不手动设置此类标头的另一个原因是编码,因为有时您应该指定类似Content-Type: text/plain; charset=utf-8.

更重要的一点Content-Type是,发出 POST 请求不需要此标头。RFC 2616

任何包含实体主体的 HTTP/1.1 消息都应该包含定义该主体的媒体类型的 Content-Type 头字段。当且仅当媒体类型不是由 Content-Type 字段给出时,接收者可以尝试通过检查其内容和/或用于识别资源的 URI 的名称扩展来猜测媒体类型。如果媒体类型仍然未知,接收者应该将其视为类型“application/octet-stream”。

因此,根据您向其发出请求的服务器类型,此标头可能为空。


抱歉,这个解释有点含糊。除非您提供目标 URL,否则我无法准确解释为什么这种方法对您有效。


推荐阅读