【问题标题】:How to resolve cURL Error (7): couldn't connect to host?如何解决 cURL 错误(7):无法连接到主机?
【发布时间】:2012-03-29 09:26:28
【问题描述】:

我使用 cUrl(php) 以 xml 格式将项目代码发送到 Web 服务。我在 localhost 中得到了正确的响应,但是当它服务器显示时它显示

cURL 错误 (7):无法连接到主机

这是我的代码:

function xml_post($post_xml, $url)
{
    $user_agent = $_SERVER['HTTP_USER_AGENT'];

    $ch = curl_init();    // initialize curl handle
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);          
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 50); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_xml); 
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
//  curl_setopt($ch, CURLOPT_PORT, $port);          

    $data = curl_exec($ch);
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    if ($curl_errno > 0) {
            echo "cURL Error ($curl_errno): $curl_error\n";
    } else {
            echo "Data received\n";
    }
    curl_close($ch);

    echo $data;
}

我将项目代码发送到计数并从中获取详细信息。我尝试使用 php 4+ 和 php5+ 两个版本,没有任何解决方案。

【问题讨论】:

  • 选择一个使用 80 端口的代理
  • 使用 curl 详细选项获取更多信息
  • 我将在此处添加两件事,最终解决了我的问题:1. 使用 --verbose 从命令行运行 cURL 2. 如果您在 OSX 上使用 Little Snitch(或类似软件),看看那个。

标签: php xml curl


【解决方案1】:

CURL 错误代码 7 (CURLE_COULDNT_CONNECT)

非常明确……意思是Failed to connect() to host or proxy.

以下代码适用于任何系统:

$ch = curl_init("http://google.com");    // initialize curl handle
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$data = curl_exec($ch);
print($data);

如果您看不到谷歌页面,那么 ..your URL is wrong 或者您有一些 firewallrestriction 问题。

【讨论】:

  • 我可以看到谷歌页面。但是然后我在 localhost 中使用相同的 url 并且它工作正常。
  • 它是你的网址...你能提供一个示例网址让我为你测试
  • 我不认为这是一个公共可用的 ip 地址network-tools.com/… Ping 122.165.82.61 与 32 字节数据:请求超时。请求超时。请求超时。请求超时。
  • @Baba 你说:If you can not see google page then .. your URL is wrong or you have some firewall or restriction issue.可能存在什么样的限制?
  • @hpaknia 谢谢,有时我们看不到明显的......作为对您的回应的补充,在 Linux 系统中,请记住检查 ACL 和 SELinux 权限,了解您的 Web 服务对正在执行的文件的访问权限。
【解决方案2】:

“CURL ERROR 7 Failed to connect to Permission denied”错误是由于任何原因导致 curl 请求被某些防火墙或类似事物阻止。

当 curl 请求不使用标准端口时,您将面临这个问题。

例如,如果您卷曲到端口 1234 上的某个 URL,您将面临这个问题,因为端口 80 的 URL 会很容易地为您提供结果。

此错误最常见于 CentOS 和任何其他带有“SElinux”的操作系统。

您需要禁用或将“SElinux”更改为允许

看看这个

http://www.akashif.co.uk/php/curl-error-7-failed-to-connect-to-permission-denied

希望对你有帮助

【讨论】:

  • 但是mac系统怎么样
  • 禁用 SELinux 太过分了,而且会对其他领域的安全性产生负面影响。您可以通过从终端更改特定选项来明确允许已知端口以外的端口: setsebool -P httpd_can_network_connect on
  • 是否有标准端口列表,curl 不会抛出此错误?
  • 在我的例子中,服务器有一个允许的连接列表并阻止所有不在该列表中的连接
  • setsebool -P httpd_can_network_connect on 对我不起作用(在 Centos 8 上,每当 ban/unbans 触发时,试图让 fail2ban curl-ing 到 webhook)。您是否必须在任何特定的当前目录上调用它,或者这会应用任何目录中的 selinux bool?
【解决方案3】:

如果你尝试了所有方法都失败了,试试这个命令:

setsebool -P httpd_can_network_connect on

【讨论】:

  • 在服务器迁移期间,我在一个非常旧的 PHP 脚本上追逐错误的错误数小时后,这才救了我。我的日志中唯一的错误是[7],我没有意识到它来自 curl。我偶然发现了这个答案,它已经恢复运行!
  • 我真的无法理解自己。好吧,我的 selinux 能力真的很浅:/
【解决方案4】:

在 PHP 中,如果您的网络在代理下。您应该设置代理 URL 和端口

curl_setopt($ch, CURLOPT_PROXY, "http://url.com"); //your proxy url
curl_setopt($ch, CURLOPT_PROXYPORT, "80"); // your proxy port number

这解决了我的问题

【讨论】:

    【解决方案5】:

    就我而言,我有类似cURL Error (7): ... Operation Timed Out 的东西。我正在使用我工作的公司的网络连接。我需要创建一些环境变量。下一个对我有用:

    在 Linux 终端中:

    $ export https_proxy=yourProxy:80
    $ export http_proxy=yourProxy:80  
    

    在 windows 中我以 windows 方式创建(相同的)环境变量。

    希望对你有帮助!

    问候!

    【讨论】:

    • 是你的代理 - 127.0.0.1
    【解决方案6】:

    您是否可以通过浏览器或 PHP 脚本访问该 URL?显示的错误是您无法连接。所以首先确认该 URL 是可访问的。

    【讨论】:

    • 是的。从本地主机我可以访问它。我在浏览器中 ping 了它,它 ping 了。
    【解决方案7】:

    检查端口 80 和 443 是否被阻塞。或输入 - IP graph.facebook.com 并将其输入到 etc/hosts 文件中

    【讨论】:

      【解决方案8】:

      如果您尝试同时使用多个 HTTP 请求访问同一个 URL,您也可以得到这个。许多 curl 请求将无法连接,因此返回错误

      【讨论】:

        【解决方案9】:

        此问题也可能是由于在远程设备上未配置 https 时对 https 进行 curl 调用引起的。在这些情况下,通过 http 调用可以解决此问题,至少在您在远程配置 ssl 之前是这样。

        【讨论】:

          【解决方案10】:

          在我的情况下,问题是由我使用的托管服务提供商阻止发往其 IP 块的 http 数据包引起的,这些数据包源自其 IP 块。不靠谱!!!

          【讨论】:

            猜你喜欢
            • 2011-04-01
            • 2023-02-17
            • 1970-01-01
            • 2013-07-31
            • 1970-01-01
            • 1970-01-01
            • 2011-05-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多