PHP curl连接超时错误

PHP curl连接超时错误,php,curl,php-curl,Php,Curl,Php Curl,我在PHP中使用curl调用API,有时工作正常,有时连接到API-domain.com端口80失败:连接超时 有点奇怪的是,有时它能工作,有时却不能。要解决此问题,我已打印了curl\u getinfo(),当它不工作时,请在下面检查它 它显示的是连接时间=0,总时间=130秒,我真的不确定这意味着什么。如果有人对此有很好的理解,请查看下面的日志,并帮助我了解确切的问题是什么 [url] => http://api-domain.com/?act=get_story_banners [c

我在PHP中使用curl调用API,有时工作正常,有时连接到API-domain.com端口80失败:连接超时

有点奇怪的是,有时它能工作,有时却不能。要解决此问题,我已打印了
curl\u 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请求会到达restapi服务器,有时则不会。它在连接级别本身被丢弃,不会到达RESTAPI服务器。我不太明白为什么它有时连接,有时不连接。

参考文档,
connect\u time
是建立上一次连接所花费的秒数,
total\u time
是上一次事务的秒数


您可以使用重新定义超时。例如,
curl\u setopt($cHandler,CURLOPT\u CONNECTTIMEOUT,42)
设置42秒的连接超时或
curl_setopt($cHandler,CURLOPT_CONNECTTIMEOUT,0)用于无连接超时。同样的方法,
curl_setopt($cHandler,CURLOPT_TIMEOUT,42)将定义42秒的执行时间超时。

经过大约一周的努力,并尝试了所有建议的选项,最后我发现这既不是连接问题,也不是API-domain.com问题。这对我来说有点奇怪,但事实上,这是我调用API的服务器扩展问题,我增加了配置(RAM和CPU),发现问题已经解决

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


谢谢大家的评论和建议。尝试在curl中添加超时设置:curl\u setopt($ch,CURLOPT\u CONNECTTIMEOUT,0);curl_setopt($ch,CURLOPT_超时,400)//秒超时api是否有https选项?有时,令人讨厌的ISP充当midleman,篡改请求内容以提供一些广告。不,现在没有https选项。你有多确定?我可以购买和安装SSL,如果它真的意味着在这种情况下。使用CURLOPT_VERBOSE来解决它,因为它是随机发生的,而不是因为处理时间。但是@hanshenrik的建议值得一试,尽可能详细地获取尽可能多的错误消息。在购买之前,我更喜欢先使用letsencrypt或其他免费解决方案。
[total_time]=>130.335916
这是否意味着脚本等待130.335916秒以获得api响应,然后抛出连接超时错误?这意味着我们能够快速连接到api-domain.com,但是API需要时间来处理和返回响应,对吗?正在添加
curl\u setopt($cHandler,CURLOPT\u CONNECTTIMEOUT,42)会解决我的问题吗?是的,你是对的。您可以使用curl_setopt()中的
CURLOPT_timeout
重新定义执行超时。我正在编辑我的答案以添加此信息。但是您认为这会解决我的问题吗?我认为它会很快抛出时间错误(大约42秒后)?您的错误是服务器端的,似乎计算查询花费了太多时间。您可以尝试优化RESTAPI或增加执行超时