当前位置: 代码网 > it编程>前端脚本>Python > Python requests.post()返回406错误的常见原因及解决方案

Python requests.post()返回406错误的常见原因及解决方案

2025年07月02日 Python 我要评论
解决 python requests.post() 返回 406 错误http 406 "not acceptable" 错误表示服务器无法生成符合客户端请求中 accept 头部

解决 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}")

如果问题仍然存在,建议:

  1. 检查 api 文档的具体要求
  2. 使用开发者工具查看浏览器发送的成功请求的格式
  3. 联系 api 提供商获取支持

到此这篇关于python requests.post()返回406错误的常见原因及解决方案的文章就介绍到这了,更多相关python requests.post()返回406内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com