Пакет RCurl не может подключиться к URL через sp_execute_external_script - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь выполнить некоторую работу в Интернете с помощью служб машинного обучения, используя пакет RCurl для R на SQL 2017. Вот пример кода sp_execute_external_script, который я пробовал:

EXEC sp_execute_external_script 
    @language = N'R',
    @script = N'library(RCurl)
library(XML)
url <- "http://www.anywebsite.com/"
tables = getURL(url)
tables <- readHTMLTable(tables, header = TRUE, as.data.frame = TRUE, stringsAsFactors = F)
OutputDataSet <- as.data.frame(tables[1])'
WITH RESULT SETS UNDEFINED;

Я получаю следующую ошибку

Сообщение 39004, уровень 16, состояние 20, строка 0 Произошла ошибка сценария 'R' во время выполнения sp_execute_external_script с помощью HRESULT 0x80004004. Сообщение 39019, Уровень 16, Состояние 2, Строка 0 Внешний сценарий произошла ошибка: загрузка требуемого пакета: битопс Ошибка в функции (type, msg, asError = TRUE): не удалось подключиться к www.anywebsite.com порт 80: Плохой доступ Вызовы: источник ... getURL -> curlPerform -> .Call -> -> fun

Ошибка в выполнении. Проверьте вывод для получения дополнительной информации. Ошибка в eval (expr, envir, enclos): Ошибка в выполнении. Проверьте вывод для дополнительной информации. Вызовы: источник -> withVisible -> eval -> eval -> .Выполнение вызова приостановлено

В коде sp_execute_external_script, если я изменю строку URL с «http» на «https», ошибка, по сути, та же, но вместо этого она ссылается на port 443. Первоначальная мысль: у меня проблема с брандмауэром. Действительно, если я выключу брандмауэр Windows, sp_execute_external_script будет успешным.
Итак ... для какого exe нужно разрешение?
Я попытался добавить исключения для sqlservr.exe (служба ядра базы данных) и launchpad.exe (панель запуска SQL Server). Ни одна попытка не удалась.

Другие примечания: Код R может быть успешно запущен в RStudio, что исключение в брандмауэре. Это среда Windows 10 с брандмауэром Защитника Windows.

Обновление
Как вы видите ниже, я принял ответ. Вот как это выглядит в моей среде Windows 10: Windows Defender Firewall with Advanced Security - Outbound Rules

1 Ответ

0 голосов
/ 05 ноября 2018

Необходимо отключить правило брандмауэра Windows , которое автоматически устанавливается при добавлении служб машинного обучения .

Правило исходящего брандмауэра будет иметь имя, подобное «Блокировать доступ к сети для локальных учетных записей R в экземпляре SQL Server MSSQLSERVER»

...