【问题标题】:PHP cURL cannot connect to IIS on local machinePHP cURL 无法连接到本地机器上的 IIS
【发布时间】:2017-08-25 19:45:21
【问题描述】:

我有一个 PHP 脚本,它尝试使用 cURL 协议连接位于我办公室的本地计算机上运行的 IIS 安装上的另一个 PHP 脚本,但未能这样做。

本地配置: 我已经在防火墙上打开了 8789 端口,我让路由器正确重定向到运行 IIS 的机器的 IP,并且我已经将 IIS 的默认端口设置为 8789。 如果我尝试通过浏览器连接到脚本 (93.144.xxx.xxx:8987/curl_response.php),我会得到结果输出,因此此设置正常工作。

当我尝试在远程网络服务器上运行 PHP 脚本时,尽管它给出了我的 cUrl 错误 (#7): 无法连接到主机cUrl 错误 (#28) : connect() 超时!(我正在尝试不同的网络服务器)

我的 PHP 脚本的 curl 部分如下:

$url = 'http://93.144.xxx.xxx:8789/curl_response.php';

$verbose = fopen('php://temp', 'w+');
$curl = curl_init();
curl_setopt ($curl, CURLOPT_VERBOSE, true);
curl_setopt ($curl, CURLOPT_STDERR, $verbose);
curl_setopt ($curl, CURLOPT_URL, $rurl);
curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt ($curl, CURLOPT_HEADER, 0);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, false);
curl_setopt ($curl, CURLOPT_PORT , 8789);

$response = curl_exec($curl);

if ($response === FALSE) {
    printf("cUrl error (#%d): %s<br>\n", curl_errno($curl),
           htmlspecialchars(curl_error($curl)));
    rewind($verbose);
    $verboseLog = stream_get_contents($verbose);

    echo "Verbose information:\n<pre>", htmlspecialchars($verboseLog),"</pre>\n";   
}else{
    curl_close($curl);
    // trim response (serialized array)
    $response = trim($response);
    // unserialize
    $response = unserialize($response);
    print_r($response);
}

我尝试了几种不同的 CURLOPT_ 配置,甚至尝试使用 dyndns 主机而不是 IP,但无济于事。

是否需要设置 IIS 配置以使其接受传入的 cURL 请求,或者是否有要通过 cURL 发送的特定标头?

谢谢。

【问题讨论】:

  • 您可以通过增加超时来检查.. 将其增加到 60 并进行测试。并删除最后一个 curl 选项 CURLOPT_PORT

标签: php curl iis localhost


【解决方案1】:

使用 --verbose 从命令行运行 cURL 以查看更多详细信息。

并检查 ISS 是否启用了 cURL:

extension=php_curl.dll

【讨论】:

    【解决方案2】:

    你有一个错字:

    curl_setopt ($curl, CURLOPT_URL, $rurl);
    

    应该是:

    curl_setopt ($curl, CURLOPT_URL, $url);
    

    这是一个工作 curl请求的例子:

    <?php
    
    $url = 'http://thepointless.com:80/';
    
    $curl = curl_init();
    curl_setopt ($curl, CURLOPT_VERBOSE, true);
    curl_setopt ($curl, CURLOPT_URL, $url);
    curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt ($curl, CURLOPT_HEADER, 0);
    curl_setopt ($curl, CURLOPT_RETURNTRANSFER, false);
    curl_setopt ($curl, CURLOPT_PORT , 80);
    
    $response = curl_exec($curl);
    
    print $response;
    
    ?>
    

    它和你的一样,除了三件事:

    • 它正在连接到端口 80
    • 它没有设置 STDERR
    • 错字已修复

    【讨论】:

    • 在更改用于清晰目的的变量时输入错误。
    • @user700119 您是否尝试过从一个已知的工作示例开始......也许复制/粘贴我的,看看是否有效? ...然后进行更改并重新测试以查看哪个更改是重大更改?
    猜你喜欢
    • 2011-08-22
    • 1970-01-01
    • 2017-07-23
    • 2015-08-23
    • 1970-01-01
    • 2012-04-02
    • 2019-12-23
    • 1970-01-01
    • 2019-12-12
    相关资源
    最近更新 更多