由于某些安全权限或其他原因,我无法在 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";
};