You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP Curl转Python Requests调用API遇404问题求助

解决Python Requests调用API返回404的问题

看起来你遇到了一个典型的请求细节不匹配问题——PHP脚本能正常调用/api/current-event-id接口,但用Python Requests实现时却返回404,不过登录和登出都正常,这说明session会话是有效的,问题肯定出在两个请求的格式差异上。我们来一步步排查:

核心差异点分析

对比你的PHP和Python代码,有两个关键差异可能导致404:

  1. GET请求的Content-Type头

    • 你的PHP代码在发送GET请求时,没有手动设置Content-Type,Curl会自动根据请求类型适配;但Python代码里给/api/current-event-id的GET请求加了content-type: application/json头。
    • 绝大多数情况下,GET请求不需要设置Content-Type,而且这个额外的头可能和API服务器预期的请求格式不匹配,导致路由匹配失败,返回404。
  2. URL拼接的斜杠重复问题

    • PHP里BASE_URL是https://website.api.com/,拼接/api/current-event-id后会变成https://website.api.com//api/current-event-id(两个斜杠),虽然很多服务器会自动处理,但部分严格的路由规则会把这个当成无效路径。你的Python代码也存在同样的问题。

修复方案

方案1:移除GET请求的多余头(最可能解决问题)

直接去掉获取事件ID请求中的headers参数,因为GET请求不需要这个Content-Type:

修改后的代码片段:

# 获取当前事件ID,移除不必要的headers
resp = session.get(BASE_URL + '/api/current-event-id')
print(resp.status_code)
print(resp.text)

方案2:修正URL拼接格式

把BASE_URL末尾的斜杠去掉,避免拼接时出现重复斜杠:

BASE_URL = 'https://website.api.com'  # 去掉末尾的/
# 之后拼接接口路径时直接加/api/xxx
resp = session.get(BASE_URL + '/api/current-event-id')

方案3:模拟PHP的GET请求细节(可选)

如果上面两个方案都不行,可以尝试完全模拟PHP Curl的GET请求行为——PHP的CurlGet函数设置了空的POSTFIELDS,虽然这不符合HTTP规范,但有些API可能依赖这个奇怪的行为:

# 模拟PHP带空POST体的GET请求
resp = session.get(BASE_URL + '/api/current-event-id', data='')

完整修复后的Python代码

import requests

BASE_URL = 'https://website.api.com'  # 移除末尾斜杠,避免路径重复
API_USER = "username"
API_PASS = "password"

session = requests.Session()

# 登录:使用data参数默认就是application/x-www-form-urlencoded,和PHP一致
resp = session.post(BASE_URL + '/api/login', data={'username': API_USER, 'password': API_PASS})
if resp.status_code != 200:
    print("*** ERROR ***: Login failed.")
else:
    print("API login successful.")

# 获取当前事件ID:移除多余headers,保证路径正确
resp = session.get(BASE_URL + '/api/current-event-id')
print(resp.status_code)
print(resp.text)

# 登出
resp = session.get(BASE_URL + '/api/logout')
if resp.status_code != 200:
    print("*** ERROR ***: Logout failed.")
else:
    print("API logout successful.")

为什么这能解决问题?

  • 你之前给GET请求加的application/json头是画蛇添足,API服务器可能因为这个不匹配的头,无法识别请求对应的路由,直接返回404;
  • 修正URL的斜杠问题,确保请求路径和PHP版本完全一致,避免路由匹配失败。

内容的提问来源于stack exchange,提问作者Andrew Young

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:11:37