python - 我应该如何将文本/纯数据传递给 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))
[编辑]:解决方案是不在请求中指定标头
非常感谢!
解决方案
使用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,否则我无法准确解释为什么这种方法对您有效。
推荐阅读
- c# - 如果两个脚本都没有附加到任何游戏对象,我如何从另一个脚本访问脚本?
- gcc - gcc 程序可以检测何时启用链接时间优化 (-flto)?
- sql - 与嵌套选择一起使用时,Ignite 的合并 SQL 不插入新行
- python - 为什么我在使用 2-dim 卷积输入层时会出现尺寸错误?
- python - 在 Python/Pandas 中使用 Regex 运算符有条件地计算数据条目
- json - 如果对象名称包含单引号,我如何选择 JSON_VALUE?
- python - 用python填充没有名称的输入标签
- azure - 无法从 corpnet 网络连接到 azure 事件中心
- npm - 通过 Package Feed Activity 进行持续集成
- ms-access - 交叉表报告 MS-Access 中的多个值