解决 python requests.post() 返回 406 错误
http 406 "not acceptable" 错误表示服务器无法生成符合客户端请求中 accept 头部指定的响应内容。
问题分析,最好的方法还是一段代码一段代码的调试
今天是模型一个登录的脚本,以前都用得好好的,现在突然不行了,出现了406的错误,觉得有点奇怪,代码如下:
header = {'content-type':'application/x-www-form-urlencoded', 'user-agent':'mozilla/5.0 (macintosh; intel mac os x 10_15_7) applewebkit/537.36 (khtml, like gecko) chrome/138.0.0.0 safari/537.36' form_data = { "actionflag":"login", "uid":"xxxxx", "password":"xxxxx" } data = parse.urlencode(from_data) response = request.post(url=login_url,header=header, data = data, verify=false)
以前上面这段代码是没有什么问题的,但最近才发现一直是406,跟踪到代码中的 sessions.py中adapter的值是对的,上面是显示访问成功而且返回值是200,这说明访问代码是没有问题的,但什么时候出的问题呢?继续往下
发现了这一段代码,其中allow_redirects的值就有点意思了,这个值的默认值是ture,但我们登录后,后面肯定有一个redirect的,也就是说后面那个跳转的地址有问题了,所以才会导致出问题
常见原因及解决方案
1. 请求头 (headers) 问题
确保你的请求头中包含正确的 accept
和 content-type
:
headers = { 'accept': 'application/json', # 或其他服务器期望的类型 'content-type': 'application/json', # 或其他适当的内容类型 # 其他必要的头部,如授权信息 }
2. 数据格式问题
确保发送的数据格式与 content-type
头部匹配:
import json data = {'key': 'value'} response = requests.post(url, data=json.dumps(data), headers=headers)
或者使用 json
参数自动处理:
response = requests.post(url, json=data, headers=headers)
3. 用户代理问题
有些服务器要求特定的 user-agent:
headers = { 'user-agent': 'mozilla/5.0 (windows nt 10.0; win64; x64) ...', # 其他头部 }
4. 认证问题
如果 api 需要认证,确保提供了正确的凭证:
headers = { 'authorization': 'bearer your_token_here', # 其他头部 }
5. 服务器端限制
检查 api 文档,确认:
- 是否支持 post 方法
- 是否接受你发送的内容类型
- 是否有其他特殊要求
完整示例
import requests import json url = 'https://api.example.com/endpoint' headers = { 'accept': 'application/json', 'content-type': 'application/json', 'user-agent': 'myapp/1.0', 'authorization': 'bearer abc123...' } data = {'key1': 'value1', 'key2': 'value2'} try: response = requests.post(url, json=data, headers=headers) response.raise_for_status() # 如果响应状态码不是200,抛出异常 print(response.json()) except requests.exceptions.requestexception as e: print(f"请求失败: {e}")
如果问题仍然存在,建议:
- 检查 api 文档的具体要求
- 使用开发者工具查看浏览器发送的成功请求的格式
- 联系 api 提供商获取支持
到此这篇关于python requests.post()返回406错误的常见原因及解决方案的文章就介绍到这了,更多相关python requests.post()返回406内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论