Laravel8 cURL请求EA接口本地正常远程服务器无返回如何排查
排查解决建议
1. 优先验证服务器网络连通性
直接登录你的Digital Ocean Droplet 服务器命令行,执行以下curl命令测试接口连通性,排除代码问题:
curl -v -H "accept: application/json" -H "Referer: https://www.ea.com/" "https://proclubs.ea.com/api/fifa/clubs/matches?matchType=gameType9&platform=ps5&clubIds=310718"
如果该命令直接超时无返回,说明问题出在网络层面,和代码无关。
2. 修复代码逻辑问题
你的现有代码存在重复执行curl请求的缺陷,连续两次调用curl_exec会导致请求被重复发送,大幅提升超时概率,调整为单次执行即可,同时可以补充浏览器UA头绕过EA的基础反爬校验:
private function doExternalApiCall($endpoint = null, $params = []) { $url = $this->apiUrl . $endpoint . http_build_query($params); dump($url); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 15, // 排查阶段可适当拉长超时时间 CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => array( 'accept: application/json', 'Referer: https://www.ea.com/', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' ), )); // 仅执行一次curl请求 $response = curl_exec($curl); if(curl_errno($curl)) { echo 'Curl error: ' . curl_error($curl); } curl_close($curl); dump($response); return $response; }
3. 排查IP封禁问题
EA的反爬机制默认会拦截大部分云厂商的IP段,Digital Ocean的IP段大概率已经被EA加入黑名单:
- 可以尝试在服务器上配置代理,用本地家用网络IP作为出口发起请求,测试是否能正常拿到返回
- 也可以更换其他云厂商的服务器实例,或者购买住宅代理IP作为请求出口
4. 排查服务器网络限制
- 检查服务器的防火墙、安全组规则,确认没有限制对外443端口的出站请求
- 测试域名解析是否正常,对比服务器和本地解析
proclubs.ea.com得到的IP是否一致:
# 服务器端执行 nslookup proclubs.ea.com
如果解析结果异常,可以将服务器DNS更换为公共DNS(8.8.8.8、1.1.1.1)后重试
- 测试端口连通性:
nc -zv proclubs.ea.com 443
如果端口连通失败,说明服务器到EA节点的链路被中断。
内容的提问来源于stack exchange,提问作者Zabs
相关产品推荐
相关产品推荐

