cURL和SSL,connect()超时

4
我正在使用cURL连接SSL服务器来接收和发送XML文件,但是当我尝试连接到服务器时,我不断收到“连接()超时!”的提示。由于我对cURL不太熟悉,因此我不知道是服务器配置出了问题,还是证书有问题,或者其他原因。以下是服务器所有者提供给我的代码:
function post($url, $post)
{
    $ch = curl_init();
    if($ch)
    {
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT,60);
        curl_setopt($ch, CURLOPT_VERBOSE,0);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $result = curl_exec($ch);
        echo '<pre>', curl_error($ch);
        curl_close($ch);
        if(!empty($result))
            return $result;
    }
}

cURL版本信息:

[version_number] => 463362
[age] => 3
[features] => 1597
[ssl_version_number] => 0
[version] => 7.18.2
[host] => i486-pc-linux-gnu
[ssl_version] => OpenSSL/0.9.8g
[libz_version] => 1.2.3.3
[protocols] => Array
    (
        [0] => tftp
        [1] => ftp
        [2] => telnet
        [3] => dict
        [4] => ldap
        [5] => ldaps
        [6] => http
        [7] => file
        [8] => https
        [9] => ftps
        [10] => scp
        [11] => sftp
    )

1
你能通过其他方式连接吗?尝试在命令行中使用带有选项-v的curl命令,看看效果如何。 - troelskn
不,那似乎也不起作用...我得到了“连接超时”的错误。 - Ganhammar
你尝试过设置 CURL_CONNECTTIMEOUT 选项吗? - Charles Sprayberry
是的,我有尝试过,结果一样。如果我在浏览器中使用cURL连接到我要连接的URL,它会在几毫秒内加载。我认为这可能与此有关。 - Ganhammar
可能是网络/防火墙问题,与curl或php无关。 - Evert
这似乎是很有可能的,你或其他人知道如何在Linux服务器上检查吗? - Ganhammar
1个回答

4
这个消息的意思是,TCP连接过程未能在允许的时间内完成。如果您尝试连接应该可以通过给定端口上的TCP访问的站点,则可能存在防火墙、代理、NAT、路由器或其他设备阻碍了您的访问。
这不是一个与curl相关的问题,您可以通过运行telnet到同一主机+端口验证这一情况:"telnet [host] [port]",由于这也会失败。

谢谢!我添加了以下规则:iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT,这解决了问题。 - Ganhammar

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