通过PHP使用Curl比通过Putty使用Curl花费更多时间

5
我将尝试发送一个cURL请求到googleapis,以获取用户信息。当我使用php脚本发送cURL请求时,需要5秒才能完成,但是,当我尝试直接从服务器发送相同的请求时,结果立即返回。
以下是我使用的php脚本:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.googleapis.com/oauth2/v2/userinfo");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Authorization: Bearer '.$accessToken));
$output=curl_exec($ch);

这是我在putty中使用的curl命令:

curl --header "Authorization: Bearer xxxxxx" https://www.googleapis.com/oauth2/v2/userinfo

什么可能是问题?
注意:php脚本在我通过putty发出curl命令的同一台服务器上运行。
注意2:这可能是某种DNS查找问题吗?起初,通过命令行运行相同的命令也需要大约5秒才能完成,因为www.googleapis.com不在我们的DNS服务器中。从那以后,我们手动添加了它,命令行函数运行速度更快。如果我更新服务器上的DNS信息,PHP将使用什么样的DNS信息,是否会自动更新?
注意3:dig www.googleapis.com返回以下内容:
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> www.googleapis.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5273 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION: ;www.googleapis.com. IN A
;; ANSWER SECTION: www.googleapis.com. 1536 IN CNAME googleapis.l.google.com. googleapis.l.google.com. 172 IN A 216.58.218.170
;; Query time: 0 msec ;; SERVER: 10.0.80.11#53(10.0.80.11) ;; WHEN: Wed Sep 9 14:35:04 2015 ;; MSG SIZE rcvd: 89

1
你是如何执行 PHP 代码的?我假设两者都成功了? - Jason McCreary
1
你是从CLI运行脚本吗?如果是的话,你确定问题是curl吗?我曾经遇到过类似的5秒超时问题。但这不是curl的问题,而是php启动延迟。为了检查是否是启动问题(在cli的情况下),只需尝试运行:php -r 'echo 1;'并检查需要多长时间。 - Endijs
1
函数curl_getInfo()和curl_error()会显示什么内容吗? - gyaani_guy
1
尝试执行以下操作,使用print_r打印返回的数组并告诉我上述参数:$info = curl_getinfo($ch); - Domain
显示剩余9条评论
1个回答

2

在这里找到了解决问题的答案:

https://dev59.com/9XTYa4cB1Zd3GeqPy8yJ#17816201

设置此选项可以解决问题:

curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

我仍然不太明白为什么和如何工作/发生,所以如果有人在另一个答案中愿意解释一下,再加上上面的解决方案,我会把它标记为正确答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接