传递JSON时出现500错误(PHP Curl/Postman)求解析方案
排查并解决JSON请求导致的500内部服务器错误
1. 先确认JSON格式合法性
把你的请求体复制到JSON校验工具中,检查是否存在语法错误。注意:HTML标签内的双引号必须用反斜杠转义(比如title=\"https://test.test.com/#/home\"),你的示例中已做处理,但要确认实际传递时转义是否完整。
2. 优先排查服务器端错误日志
500错误是服务器内部异常,核心解决步骤是查看错误详情:
- 若有权限,直接查看服务器日志(如Apache的
error.log、Nginx的error.log或PHP的error_log),日志会明确指出错误原因(比如JSON解析失败、HTML内容触发过滤规则、字符编码问题等)。 - 若无权限,先简化请求体测试:传递极简JSON(如
{"worknotes": "test"}),如果能正常响应,再逐步添加HTML内容,定位触发错误的具体部分。
3. PHP Curl代码规范检查
确保Curl代码正确处理JSON编码与请求头,避免手动拼接JSON导致的错误:
$url = "你的接口地址"; $data = [ 'worknotes' => '<div>In this case, Employee to visit <a title="https://test.test.com/#/home" href="https://test.test.com/#/home" rel="noreferrer noopener" target="_blank">https://travel.test.com/#/home</a> , click on help and log a case for support.<br /></div>' ]; // 自动处理转义,保留原始字符 $jsonData = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen($jsonData) ]); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); // 输出调试信息 echo "HTTP状态码: " . $httpCode . "\n"; echo "响应内容: " . $response;
- 用
json_encode自动处理转义,不要手动拼接JSON字符串。 - 添加
Content-Length头,确保服务器正确识别请求体长度。 - 打印HTTP状态码和响应内容,获取更详细的错误提示。
4. Postman调试技巧
- 打开Postman的Console,查看实际发送的请求内容,确认JSON格式、请求头是否符合要求。
- 逐步简化请求体:先去掉
、a标签等内容,测试是否能正常请求,以此定位问题点。 - 排查是否存在服务器安全拦截(如WAF规则),HTML内容可能被判定为恶意请求导致500错误。
5. 字符编码校验
确保请求体为UTF-8编码:
- PHP中
json_encode默认输出UTF-8编码,需保证原始字符串是UTF-8格式,避免乱码导致服务器解析失败。 - Postman默认使用UTF-8,可在设置中确认编码选项。
内容的提问来源于stack exchange,提问作者praneeth1124
相关产品推荐
相关产品推荐

