Pythonrequests.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的,也就是说后面那个跳转的地址有问题了,所以才会导致出问题
  • 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内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python爬虫报错<response [406]>(已解决) Python Requests.post()请求失败时的retry设置方式 Python requests.post()方法中data和json参数的使用方法
  • 目录
    • 解决 Python requests.post() 返回 406 错误
    • 问题分析,最好的方法还是一段代码一段代码的调试
    • 常见原因及解决方案
      • 1. 请求头 (headers) 问题
      • 2. 数据格式问题
      • 3. 用户代理问题
      • 4. 认证问题
      • 5. 服务器端限制
    • 完整示例

      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的,也就是说后面那个跳转的地址有问题了,所以才会导致出问题

      确保你的请求头中包含正确的 Accept 和 Content-Type

      headers = {
          'Accept': 'application/json',  # 或其他服务器期望的类型
          'Content-Type': 'application/json',  # 或其他适当的内容类型
          # 其他必要的头部,如授权信息
      }
      

      确保发送的数据格式与 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)
      

      有些服务器要求特定的 User-Agent:

      headers = {
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...',
          # 其他头部
      }
      

      如果 API 需要认证,确保提供了正确的凭证:

      headers = {
          'Authorization': 'Bearer your_token_here',
          # 其他头部
      }
      

      检查 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内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

      您可能感兴趣的文章:

      • Python爬虫报错<response [406]>(已解决)
      • Python Requests.post()请求失败时的retry设置方式
      • Python requests.post()方法中data和json参数的使用方法

      站内搜索