Я не могу использовать исходящие HTTP-запросы в IIS из-за некоторых разрешений безопасности или чего-то еще
Я пытаюсь использовать свою собственную HTTP-службу REST (это отдельное приложение) на локальном хосте на моем сайте Perl CGI
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
service - это отдельное приложение за пределами IIS, оно запущено и выдает статус активности при доступе к http://127.0.0.1:8000/get
через браузер; Я вижу, что он прослушивает порт 8000; Я отключил брандмауэр
та же конфигурация с тем же приложением работает с lighttpd
в окне Linux проблема возникает только тогда, когда я запускаю под Windows и IIS
Я попытался запустить свой пул приложений Perl CGI как Network Service
и даже Local System
аккаунт - тот же результат
Как мне настроить IIS, чтобы разрешить исходящие HTTP-вызовы REST на другой автономный веб-сервис на локальном хосте?
ОБНОВИТЬ
После небольшого расследования выяснилось, что это обычная проблема IIS.
просто гугл IIS Can't create TCP/IP socket (10106)
Это не ограничение безопасности. Perl пытается найти драйверы DLL в системном реестре:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ Tcpip
но путь к dll основан на переменной среды% SystemRoot%, а IIS не передает среду через FastCGI
Добавьте в свою программу следующий текст:
НАЧАТЬ {
$ENV {SYSTEMROOT} = "C:\\Windows";
};