允许从站点代码传出 REST http 请求的 IIS 权限

允许从站点代码传出 REST http 请求的 IIS 权限

由于某些安全权限或其他原因,我无法在 IIS 中使用传出 http 请求

我正在尝试在我的 perl CGI 站点上的本地主机上使用我自己的 REST http 服务(它是一个独立的应用程序)

use LWP::UserAgent;
my $ua = LWP::UserAgent -> new (timeout => 600);
my $response = $ua -> get ('http://127.0.0.1:8000/get');
if ($response -> is_error ()) {
    die join ("\n\n",
        $response -> error_as_HTML ()
        , $response -> code ()
        , $response -> content ()
        , $response -> status_line ()
    );
}

这是我得到的

<html>
<head><title>An Error Occurred</title></head>
<body>
<h1>An Error Occurred</h1>
<p>500 Can't connect to 127.0.0.1:8000</p>
</body>
</html>


500

Can't connect to 127.0.0.1:8000

Invalid argument. at C:/strawberry/perl/site/lib/LWP/Protocol/http.pm line 60.


500 Can't connect to 127.0.0.1:8000 at C:\inetpub\wwwroot\test\lib\Content\_lib.pm line 724.

我的127.0.0.1:8000服务是 IIS 之外的独立应用程序,它正在运行,当我http://127.0.0.1:8000/get通过浏览器访问时,它会显示活动状态;我可以看到它正在监听端口 8000;我关闭了防火墙

相同的配置和相同的应用程序在 Linux 机器上运行lighttpd,只有当我在 Windows 和 IIS 下运行时才会出现问题

Network Service我尝试以甚至帐户的身份运行我的 perl CGI 应用程序池Local System- 结果相同

我应该如何配置 IIS 以允许向本地主机上的另一个独立 Web 服务发出 http REST 调用?

更新

经过一些低级调查,看起来这是一个常见的 IIS 问题

谷歌一下IIS Can't create TCP/IP socket (10106)

答案1

这不是安全限制。Perl 尝试在系统注册表中查找一些驱动程序的 dll:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip

但 dll 的路径基于环境变量 %SystemRoot%,并且 IIS 不通过 FastCGI 传递环境

将以下文本添加到您的程序中:

开始 {

    $ENV {SYSTEMROOT} = "C:\\Windows";

};

相关内容