CURL 和 HTTPS,“无法解析主机”

2022-08-30 10:57:22

我正在尝试使用 CURL 获取页面的内容。执行提取的页面是 https,它尝试提取的页面也是 https。我收到一条错误消息“无法解析主机”,其中包含我尝试的所有设置。

$c=curl_init();
curl_setopt($c, CURLOPT_URL,$url);
//curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko/20041107 Firefox/x.x");
curl_setopt ($c, CURLOPT_RETURNTRANSFER, TRUE);
//curl_setopt($c, CURLOPT_SSL_VERIFYPEER, TRUE);
//curl_setopt($c, CURLOPT_SSL_VERIFYHOST, TRUE);
curl_setopt($c, CURLOPT_HEADER, FALSE);

$html=curl_exec($c);

if($html === false) {
    echo curl_error($c);
}
else {
    echo 'Operation completed without any errors';
}   


curl_close($c);

有什么想法吗?


答案 1

我发现curl可以决定使用IPv6,在这种情况下,它会尝试解析,但没有得到IPv6答案(或类似的东西)并超时。

您可以尝试使用 curl 命令行开关 -4 对此进行测试:

curl -4 http://x.com

在 PHP 中,您可以通过设置以下内容来配置此行:

curl_setopt($c, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

此选项的官方手册页:https://curl.se/libcurl/c/CURLOPT_IPRESOLVE.html


答案 2

也许是 DNS 问题?

尝试使用此代码的网址:

$_h = curl_init();
curl_setopt($_h, CURLOPT_HEADER, 1);
curl_setopt($_h, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($_h, CURLOPT_HTTPGET, 1);
curl_setopt($_h, CURLOPT_URL, 'YOUR_URL' );
curl_setopt($_h, CURLOPT_DNS_USE_GLOBAL_CACHE, false );
curl_setopt($_h, CURLOPT_DNS_CACHE_TIMEOUT, 2 );

var_dump(curl_exec($_h));
var_dump(curl_getinfo($_h));
var_dump(curl_error($_h)); 

推荐