卷曲错误#:无法解析主机:-PHP

卷曲错误#:无法解析主机:-PHP,php,curl,Php,Curl,我对此代码有问题: function get_request($url,$header_array){ $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CU

我对此代码有问题:

function get_request($url,$header_array){

        $curl = curl_init();
        curl_setopt_array($curl, array(
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_ENCODING => "",
          CURLOPT_MAXREDIRS => 10,
          CURLOPT_TIMEOUT => 30,
          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => $header_array,
        ));

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
          echo "cURL Error #:" . $err;
        } else {
          return $response;
        }

    }
我有一个错误:

cURL Error #:Could not resolve host:

我知道有很多这样的问题,但是这些问题的答案对我没有帮助,因为代码不同。是否有人可以帮助我修复此错误:

可能有一些问题;一般来说,这要么是一个格式错误的URL,要么是一个超出cURL范围的网络问题

cURL Error #:Could not resolve host:
首先,为自己节省一些时间,只需反复检查键入的URL是否正确。我一次又一次地这样做

接下来,在PHP代码执行的同一台机器和同一个用户下,运行类似于
curl-sS的程序http://yoururl.com/example
从命令行。这将帮助您仔细检查您的代码是否可以发出出站HTTP请求

如果您的curl命令在bash中失败,那么您可以根据错误查找一些原因:

  • 网络问题(您的本地/dev计算机是否已失去internet连接?)
  • 防火墙问题;您的防火墙是否配置为允许入站HTTP而不允许出站HTTP
  • 这是一个DNS问题(我最喜欢!)。如果域是新的,可能它还没有向服务器的上游DNS提出建议

在这一点上,您的问题从curl转向网络和DNS,所以我不会深入到调试。。。但这至少是我开始查看您的错误消息的地方。

阅读症状,您使用的DNS解析程序可能太忙(超时)-或者-在特定时间跨度内限制每个IP地址的查询次数。因此,如果在不同的日期运行,相同的确切过程可能会产生不同的错误。

当我仅访问此特定页面时,不会发生这种情况。但是我的脚本通过3000个URL,然后发生了这种情况。这意味着我的代码很好,我想是的……那么,基于这个特定的url,上面建议的调试技巧的结果是什么呢?好吧,当我只启动一个特定的url脚本时,效果非常好。错误发生在我启动完整脚本时。然后会出现此错误,而不是每次都出现在相同的URL上。如果我现在开始脚本,我需要24小时才能完成。这个错误将出现在一些URL上,明天它将出现在不同的URL上。我。。。巧妙地重复我的建议,调试那些失败的。如果您正在等待长时间运行的进程,一些日志记录/跟踪也可能有助于您的调试,但这超出了您的问题范围。我检查了所有3个选项,没有发现任何问题。那么您是否建议我在每次访问url后休眠脚本?另一个可能的想法,您可以循环使用不同的名称服务器-这样管理员就不会感到不安,您的脚本也可以全速运行;-)你是什么意思,你有例子吗?这就是我的建议:x=0;mydns=[8.8.8.8,8.8.4.4,1.1.1.1,…](所有url)curl--dns服务器(url)。。。。x=x+1;如果(x>10)x=0;如果您得到的错误数是10%,那么它应该是非常小的,比如说,交替使用10个名称服务器——理论上它减少了10%的负载。如果这是原因,你应该消除你恼人的错误。。。请尝试一下(抱歉,此网站是新手,仍然无法正确设置代码格式)。您的函数中有一个空的或格式错误的URL。错误消息应为
无法解析主机:example.com
,但由于消息中未显示主机名,因此提供的URL存在问题。添加
var\u导出($url,true)到您的错误消息。