PHP curl连接超时错误

时间:2018-06-13 12:02:03

标签: php curl php-curl

我在PHP中使用curl调用API,有时它工作正常,有时我得到Failed to connect to api-domain.com port 80: Connection timed out

有时它工作有时候有点奇怪,有时却不行。要解决问题,我在curl_getinfo()打印时无效,请在下方查看。

它显示连接时间= 0和总时间= 130秒,我不确定它是什么意思。如果任何人对此有充分了解,请查看以下日志并帮助我了解具体问题。

[url] => http://api-domain.com/?act=get_story_banners
[content_type] => text/html; charset=UTF-8
[http_code] => 200
[header_size] => 630
[req   uest_size] => 283
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 130.335916
[namelookup_time] => 0.000016
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 744
[speed_download] => 13814
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => -1
[starttransfer_time] => 0
[redirect_time] => 0
[redirect_url] => 
[primary_ip] => 34.231.133.7
[certinfo] => Array()
[primary_port] => 80
[local_ip] => xxx.xxx.xxx.xxx
[local_port] => 48080

提前感谢!

修改

有时curl请求来自REST API服务器,有时它不会。它在连接级别本身被丢弃,不会到达REST API服务器。我有点困惑,为什么有时它会连接,有时它不会。

2 个答案:

答案 0 :(得分:6)

参考curl_getinfo()的文档,connect_time是建立最后一次连接所需的时间,而total_time是最后一次交易的秒数。

您可以使用curl_setopt()重新定义超时。例如,curl_setopt($cHandler, CURLOPT_CONNECTTIMEOUT, 42);设置42秒的连接超时或curl_setopt($cHandler, CURLOPT_CONNECTTIMEOUT, 0);没有连接超时。同样,curl_setopt($cHandler, CURLOPT_TIMEOUT, 42);将定义42秒执行超时。

答案 1 :(得分:0)

经过1周的苦苦挣扎并尝试了所有建议的选项,我最终发现这既不是连接问题也不是API api-domain.com问题。对我来说有点奇怪,但确实是我正在调用API的SERVER扩展问题,我增加了配置(RAM和CPU)并发现此问题已得到解决。

希望我在此问题上的经验能帮助某人,并节省他们进行故障排除的时间。

谢谢大家对解决方案的评论和建议。