Назад | Перейти на главную страницу

Разрешения IIS для разрешения исходящих HTTP-запросов REST от кода сайта

Я не могу использовать исходящие 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";

};