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

PHP cURL调用SNOMED API无响应,浏览器访问正常求排查

解决PHP cURL调用SNOMED API返回空响应的问题

问题分析

从返回的cURL信息能看到,HTTP状态码是423 Locked,这说明服务器拒绝了请求,原因是资源被锁定。浏览器能正常访问是因为它会自动携带必要的请求头(比如User-Agent),而PHP cURL默认请求头过于简单,被服务器识别为非浏览器请求,从而被拦截。

解决方案

1. 添加浏览器模拟请求头

在cURL配置中加入User-Agent和Accept头,模拟浏览器的请求格式:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Accept: application/json, text/javascript, */*; q=0.01'
));

2. 开启cURL错误输出

取消代码中错误输出语句的注释,方便排查后续问题:

echo curl_error($ch);
echo '<p>';
echo curl_errno($ch);
echo '<p>';

3. 完整修改后的代码

<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://browser.ihtsdotools.org/snowstorm/snomed-ct/browser/MAIN/2022-03-31/concepts/84114007");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, false);
// 添加模拟浏览器的请求头
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Accept: application/json, text/javascript, */*; q=0.01'
));

$response = curl_exec($ch);
// 输出错误信息排查问题
echo curl_error($ch);
echo '<p>';
echo curl_errno($ch);
echo '<p>';
$info = rawurldecode(var_export(curl_getinfo($ch),true));
curl_close($ch);

echo "<pre>
$info<br>
</pre>";

var_dump ($response);
?>

补充说明

423状态码一般是服务器反爬机制导致的,通过模拟浏览器请求头可绕过这类检测。如果添加上述头后仍有问题,可以复制浏览器请求中的全部请求头(在浏览器开发者工具的Network面板查看),全部加入到cURL的CURLOPT_HTTPHEADER中。

内容的提问来源于stack exchange,提问作者Guillaume Speierer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:20:42