_from_response(err.response) from None openai.APIStatusError: <html> <head><titl...

2026年04月25日 09:45 processing

错误信息

(.venv) PS D:\code\laohuaproject> & d:/code/laohuaproject/.venv/Scripts/python.exe d:/code/laohuaproject/datashow/api_test_0425.py Traceback (most recent call last): File "d:\code\laohuaproject\datashow\api_test_0425.py", line 82, in <module> ai_result = glm41v_analyze_figure(fig, default_prompt) File "d:\code\laohuaproject\datashow\api_test_0425.py", line 61, in glm41v_analyze_figure resp = client.chat.completions.create( model="glm-4.1v-thinking-free", messages=messages, temperature=0.7, ) File "D:\code\laohuaproject\.venv\Lib\site-packages\openai\_utils\_utils.py", line 287, in wrapper return func(*args, **kwargs) File "D:\code\laohuaproject\.venv\Lib\site-packages\openai\resources\chat\completions\completions.py", line 1211, in create return self._post( ~~~~~~~~~~^ "/chat/completions", ^^^^^^^^^^^^^^^^^^^^ ...<47 lines>... stream_cls=Stream[ChatCompletionChunk], ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "D:\code\laohuaproject\.venv\Lib\site-packages\openai\_base_client.py", line 1314, in post return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\code\laohuaproject\.venv\Lib\site-packages\openai\_base_client.py", line 1087, in request raise self._make_status_error_from_response(err.response) from None openai.APIStatusError: <html> <head><title>405 Not Allowed</title></head> <body> <center><h1>405 Not Allowed</h1></center> <hr><center>nginx</center> </body> </html>

AI 解决方案

报错分析报告

1.错误翻译


原文:405 Not Allowed
译文:405 方法不允许

2. 原因分析


  • 根本原因:API请求使用的HTTP方法/端点未被服务器允许(nginx返回405状态码)。

  • 具体位置:调用client.chat.completions.create()时,可能因API基础URL配置错误模型名称无效端点路径不匹配,导致请求被拒绝。
  • 3. 解决方案


    from openai import OpenAI
    
    # 1. 配置DMXAPI兼容客户端(关键修复)
    client = OpenAI(
        api_key="your_dmxapi_key",       # 替换为实际密钥
        base_url="https://api.dmxapi.cn/v1"  # DMXAPI的OpenAI兼容端点
    )
    
    # 2. 修正后的调用逻辑
    def glm41v_analyze_figure(fig, prompt):
        messages = [
            {"role": "user", "content": [
                {"type": "image_url", "image_url": {"url": fig}},
                {"type": "text", "text": prompt}
            ]}
        ]
        try:
            resp = client.chat.completions.create(
                model="glm-4.1v-thinking-free",  # 确认模型名与文档一致
                messages=messages,
                temperature=0.7,
            )
            return resp.choices[0].message.content
        except Exception as e:
            print(f"API调用失败: {e}")
            return None
    

    4. 预防措施


  • 核对文档:调用前确认平台(如DMXAPI)的基础URL模型名称请求格式(参考官方API文档);

  • 预测试:用Postman/curl先验证请求有效性(如curl -X POST https://api.dmxapi.cn/v1/chat/completions -H "Authorization: Bearer YOUR_KEY" -d '{"model":"glm-4.1v-thinking-free",...}');

  • 工具推荐:使用httpieInsomnia可视化调试API请求。