由于某些安全权限等原因,我无法在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端口; 我closures了防火墙
相同的应用程序与Linux上的lighttpd相同的configuration工作,只有当我运行在Windows和IIS下,才会出现问题
我试图运行我的Perl CGI应用程序池作为Network Service ,甚至Local System帐户 – 相同的结果
我应该如何configurationIIS以允许传出的HTTP REST调用到本地主机上的另一个独立的web服务?
UPDATE
经过一些低级调查,看起来这是常见的IIS问题
只是谷歌IIS Can't create TCP/IP socket (10106)
这不是安全限制。 Perl试图在系统registry中find一些驱动程序的DLL:
HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \服务\ TCPIP
但dll的path是基于环境variables%SystemRoot%,并且IIS不通过FastCGI传递环境
将以下文本添加到您的程序中:
开始 {
$ENV {SYSTEMROOT} = "C:\\Windows";};