卷曲 returns 结果但 php 没有

Curl returns result but php doesn't

我发现了一个非常有趣的错误。当我 运行 cmd:

curl https://example.com

我看到了结果,但是当我 运行 php 脚本时:

$ch = curl_init("https://example.com");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

if (curl_errno($ch)) {
    echo 'Error: ' . curl_error($ch) . "\n";
}

curl_close($ch);

echo $result;

我明白了:

Error: Operation timed out after 10002 milliseconds with 0 bytes received

我尝试了很多选项,但没有找到好的解决方案。

编辑:时间不是问题。我可以更改 1200s 的超时,但没有帮助。

根据您在评论中发布的 CURLOPT_VERBOSE 日志,您不是在尝试连接到 example.com ,而是在尝试连接到 www.opentable.com ,并且 opentable.com 不响应没有任何 User-Agent 的请求。它适用于 curl cli 程序,因为 curl cli 有一个默认值 user-agent,但它不适用于 libcurl,因为 libcurl 默认没有 user-agent。设置 User-Agent header 连接到 opentable.com.

curl_setopt($ch,CURLOPT_USERAGENT,"libcurl/".curl_version()["version"]." PHP/".PHP_VERSION);