API调用失败求助:POST请求返回404 Not Found错误
排查API调用404失败的原因及修复方案
从你遇到的404 Not Found错误来看,核心问题是请求的URL路径不存在,结合你的代码和实际请求记录,我整理了几个关键问题和解决思路:
1. URL端点与域名的双重偏差
你的代码里写的请求URL是:
'http://vph.com/api/GetService'.$hospital_id
但实际发送的请求是http://vpshealth.com/api/GetServiceList37——这里有两个明显的错误:
- 域名不一致:代码里用的是
vph.com,实际请求的是vpshealth.com,先确认正确的API域名,统一修正。 - 端点名称错误:代码里拼接的是
GetService+ID,但实际请求的是GetServiceList+ID,说明正确的API端点应该是GetServiceList而不是GetService,这是导致404的核心原因之一。
2. 参数传递方式不合理
从接口命名GetServiceList来看,它更偏向于获取列表的接口,这类接口通常不会把hospital_id直接拼在URL路径末尾,而是作为查询参数或请求体参数传递:
- 如果是GET请求:把
hospital_id作为查询参数,URL格式应为http://vpshealth.com/api/GetServiceList?hospital_id=37 - 如果是POST请求:在
form_params里用正确的参数名(比如hospital_id而非body)传递,而非拼在URL里
你的代码既把ID拼在URL末尾,又在请求体里传了body=>$hospital_id,属于重复传递,且参数名可能不符合API的要求。
3. 修正后的代码示例
假设正确的API信息为:域名vpshealth.com,端点/api/GetServiceList,POST请求,参数名hospital_id,修正后的代码如下:
public function index() { $client = new Client(); $hospital_id = 37; $res = $client->request('POST', 'http://vpshealth.com/api/GetServiceList',[ 'form_params' => [ 'hospital_id' => $hospital_id ] ]); }
如果API要求使用GET方法,代码调整为:
public function index() { $client = new Client(); $hospital_id = 37; $res = $client->request('GET', 'http://vpshealth.com/api/GetServiceList',[ 'query' => [ 'hospital_id' => $hospital_id ] ]); }
额外建议
- 优先核对API文档:确认正确的域名、端点路径、HTTP方法、参数名称和传递方式,这是解决这类问题的根本。
- 先用Postman或curl手动测试API:确认请求格式正确后再编写代码,能快速定位是代码问题还是API配置问题。
内容的提问来源于stack exchange,提问作者rahul singh




