【问题标题】:Server accessible to proxies but not cURL?服务器可以访问代理但不能访问 cURL?
【发布时间】:2013-03-03 20:49:41
【问题描述】:

我已经用代理测试了我的本地服务器,我的朋友都可以在他们的浏览器中加载 url,但是当我尝试在单独的服务器上使用 cURL 时,连接失败。

这是网址,它会在我的浏览器和我朋友的互联网上加载:

http://pc.stephen3.com:8080/gameq.php

这是我在单独服务器上使用的代码,它成功检索了所有其他 URL(如 google 和 yahoo)

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://pc.stephen3.com:8080/gameq.php");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$err = curl_error($ch);
$resp = curl_exec($ch);
echo $resp;
echo $err;

但它在我的家庭服务器的 url 上没有返回任何内容,并且

curl_error($ch);

(确实说过,现在什么也没说)“无法连接到主机”

有什么想法吗? url 在任何地方都有效,但在 cURL 中。该代码适用于任何地方,但使用 URL。

编辑: 我突然想到这可能是因为我的外部服务器上的出站流量位于端口 8080 而不是常规服务器的 80 端口上,必须测试我的主机是否允许 curl on其他端口。

【问题讨论】:

    标签: php apache curl


    【解决方案1】:

    也许您必须从​​ URL 中删除端口号并配置 CURLOPT_PORT 选项。

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://pc.stephen3.com/gameq.php"); // port removed
    curl_setopt($ch, CURLOPT_PORT, 8080);  // that line added
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $err = curl_error($ch);
    $resp = curl_exec($ch);
    echo $resp;
    echo $err;
    

    您也可以使用curl_getinfo($ch) 函数获取更多调试信息。

    $report=curl_getinfo($ch);
    echo "curl_getinfo returned: <br>".$report;
    

    【讨论】:

      【解决方案2】:

      原来我的主机 (iPower) 将 cURL 限制为端口 80 :(

      编辑:我发现支持撒谎,说只允许端口 80。事实上,它们允许端口 80 和 990 (SSL),但您可以使用端口 990,而无需实际启用 SSL。完美运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-20
        • 1970-01-01
        相关资源
        最近更新 更多