PHP中Curl调用API返回空响应且HTTP 500错误求助
PHP CURL调用API返回空响应(HTTP 500错误)排查方案
问题分析
从curl_getinfo返回的http_code = 500可以确定,服务器返回了内部错误,这是响应为空的核心原因——服务器处理你的请求时出现异常,没有生成有效响应体。而Insomnia/Shell能正常工作,说明你的PHP请求和它们的请求存在关键差异。
具体排查与修复步骤
确保请求头包含
Content-Type: application/json
你用json_encode($this->body)生成了JSON格式的请求体,但如果请求头里没有声明该类型,服务器可能无法正确解析JSON,进而触发500错误。检查$this->headers,如果没有就添加:$this->headers[] = 'Content-Type: application/json';添加CURL错误捕获
原代码未捕获CURL自身的错误信息,无法定位请求过程中的问题。修改代码:$ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers); curl_setopt($ch, CURLINFO_HEADER_OUT, true); curl_setopt($ch, CURLOPT_URL, $this->url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($this->body)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $return_data = curl_exec($ch); // 新增错误捕获逻辑 if(curl_errno($ch)){ $error_msg = curl_error($ch); curl_close($ch); return "CURL错误: " . $error_msg; } curl_close($ch); if ($return_data) return $return_data; else return "empty";对比请求头与Insomnia/Shell的一致性
通过curl_getinfo($ch, CURLINFO_HEADER_OUT)打印实际发送的请求头,和Insomnia里的请求头逐一对比,确保所有必要头信息(比如Authorization、Accept等)完全一致。缺失关键头是触发服务器500错误的常见原因。校验请求体内容
打印json_encode($this->body)的结果,和Insomnia里的请求体对比,确认JSON结构、字段值完全一致,避免因字段缺失、格式错误导致服务器处理失败。
内容的提问来源于stack exchange,提问作者SoyNeko
相关产品推荐
相关产品推荐

