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

PHP调用Shodan API时Curl搜索无响应问题排查

解决PHP Curl调用Shodan API无响应的问题

我来帮你排查代码里的问题,这个操作不是始终无法执行,修正几个关键点就能正常工作:

1. URL中的转义字符错误

你URL里的&是HTML转义后的&符号,Curl会把它当成URL的一部分,而非参数分隔符。必须把&替换成普通的&:
原URL:

'https://api.shodan.io/shodan/host/search?key=myapikey&query=apache&facets={}'

修正后:

'https://api.shodan.io/shodan/host/search?key=your_real_api_key&query=apache&facets={}'

注意:一定要把myapikey换成你在Shodan平台获取的真实有效API密钥

2. 不必要的请求头

你设置了Content-Type: application/json,但这是一个GET请求——Shodan的搜索接口通过URL参数传递数据,请求体为空,这个多余的头可能干扰接口正常解析,建议移除CURLOPT_HTTPHEADER的设置。

3. SSL验证问题(本地环境常见坑)

如果你的本地PHP环境没有配置有效的SSL根证书,Curl会因SSL证书验证失败静默失败,无任何返回。调试阶段可临时关闭SSL验证(生产环境不建议,最好配置CA证书):

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

4. 添加错误调试代码

为快速定位问题,建议在curl_exec后添加Curl错误检测,直接查看具体错误信息:

$do = curl_exec($ch);
if(curl_errno($ch)) {
    echo 'Curl执行错误: ' . curl_error($ch);
    exit;
}

修正后的完整代码

$ch = curl_init(); 
// 替换成真实API密钥,修正URL中的&符号
curl_setopt($ch, CURLOPT_URL, 'https://api.shodan.io/shodan/host/search?key=your_real_api_key&query=apache&facets={}'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
// 本地调试临时关闭SSL验证(生产环境请删除这行并配置CA证书)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$do = curl_exec($ch); 

// 添加错误检测
if(curl_errno($ch)) {
    echo 'Curl错误: ' . curl_error($ch);
    curl_close($ch);
    exit;
}

$do1 = json_decode($do, true); 
curl_close($ch); 

// 打印结果,如果解码失败可以先打印原始响应看看
if($do1 === null) {
    echo 'JSON解码失败,原始响应:' . $do;
} else {
    print_r($do1);
}

按照上面的修改,应该就能正常获取Shodan API的响应了。如果还是有问题,先看Curl的错误提示,或者打印原始的$do内容,看看Shodan返回的错误信息(比如API密钥无效、请求次数超限等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:08:12