使用Python Requests调用API时,含空格的API Key导致403认证错误求助
Python requests POST JSON时403认证错误的解决办法
你的问题和API Key里的空格完全没关系,是两个低级错误导致的:
问题根源
- Headers语法错误:你写的headers字典里,
"content-type":"application/json少了结尾的双引号,这会直接导致headers构造失败,Authorization头根本没被正确发送到服务器,所以返回"未提供认证信息"的403。 - 数据格式与Content-Type不匹配:你指定了
Content-Type: application/json,但传入的data是form表单格式的字符串,服务器无法解析这种格式的请求体,雪上加霜。
正确代码写法
最简单的方式是用requests的json参数传递数据,它会自动帮你序列化JSON并设置正确的Content-Type头:
import requests url = "https://myurlhere.com/api/status/" headers = {"Authorization": "Token d6bf96a81a58bf6e99ad1f819b244242797c0c07"} data = {"status": "Good", "value": "foobar"} response = requests.post(url, headers=headers, json=data) # 可选:打印响应信息排查问题 print(response.status_code) print(response.text)
如果非要手动设置Content-Type头,也可以这么写(需要手动序列化JSON):
import requests import json url = "https://myurlhere.com/api/status/" headers = { "Authorization": "Token d6bf96a81a58bf6e99ad1f819b244242797c0c07", "Content-Type": "application/json" } data = {"status": "Good", "value": "foobar"} response = requests.post(url, headers=headers, data=json.dumps(data))
关键说明
- Token后面的空格是标准的HTTP认证头格式,完全合法,不是问题所在。
- 403的核心原因是headers语法错误导致认证头未正确发送,加上数据格式与声明的Content-Type不匹配,双重错误触发了服务器的拒绝响应。
内容的提问来源于stack exchange,提问作者molware
相关产品推荐
相关产品推荐

