python - 如何使用请求修复 Python 中的“415 Unsupported Media Type”错误
问题描述
我想通过使用 bitbucket 的 rest api 创建一个提交。到目前为止,有关问题的所有答案Response 415
都已通过将Content-Type
标题中的 设置为 来解决application/json;charset-UTF8
。但是,这并不能解决我得到的响应。
所以这就是我想要做的:
import requests
def commit_file(s, path, content, commit_message, branch, source_commit_id):
data = dict(content=content, message=commit_message, branch=branch, sourceCommitId=source_commit_id)
r = s.put(path, data=data, headers={'Content-type': 'application/json;charset=utf-8'})
return r.status_code
s = requests.Session()
s.auth = ('name', 'token')
url = 'https://example.com/api/1.0/projects/Project/repos/repo/browse/file.txt'
file = s.get(url)
r = commit_file(s, url, file.json() , 'Commit Message', 'test', '51e0f6faf64')
GET
请求成功返回文件,我想在确实存在的分支上提交它的内容test
。
不管Content-Type
,status_code
的响应是415
。
这是 put 请求的标头:
OrderedDict([('user-agent', ('User-Agent', 'python-requests/2.21.0')), ('accept-encoding', ('Accept-Encoding', 'gzip, deflate')), ('accept', ('Accept', '*/*')), ('connection', ('Connection', 'keep-alive')), ('content-type', ('Content-type', 'application/json;charset=utf-8')), ('content-length', ('Content-Length', '121')), ('authorization', ('Authorization', 'Basic YnVybWF4MDA6Tnp...NkJqWGp1a2JjQ3dNZzhHeGI='))])
这解释了 curl 的用法以及文件何时在本地可用。当如上所示检索文件的内容时,正确的请求在 python 中的外观如何?
这是使用以下方法的解决方案MultipartEncoder
:
import requests
import requests_toolbelt.multipart.encoder
def commit_file(s, path, content, commit_message, branch, source_commit_id):
data = requests_toolbelt.MultipartEncoder(
fields={
'content': content,
'message': commit_message,
'branch': branch,
'sourceCommitId': source_commit_id
}
)
r = s.put(path, data=data, headers={'Content-type': data.content_type})
解决方案
内容类型application/json;charset=utf-8
不正确。
根据文档,您必须发送多部分表单数据。您不能使用 JSON。
此资源接受 PUT 多部分表单数据,其中包含名为 的表单字段中的文件
content
。
推荐阅读
- python - 尝试从文本文件中对列进行排序
- java - java - 在输入int,char和int时如何避免Java中的InputMismatchException
- laravel - 如何从laravel中的url中删除id
- reactjs - 尝试附加图像时出现 CORS 错误
- r - Reddit 抓取错误 HTTP 状态为“403 Forbidden”
- python - 在 python Pandas 中将对象转换为时间
- node.js - 这个包已被弃用,现在它只导出 makeExecutableSchema
- function - Kivy 多个切换按钮都在一个函数中读取
- javascript - 如何提交我的文本框值以转到 React js 中的链接?
- java - 如何在 Firebase Firestore 中获取随机文档