Лучший отвечающий
Выполнить http запрос.

Вопрос
-
Есть скрипт, который почему то не выполняется:
alter procedure HTTP_POST( @sUrl varchar(200), @response varchar(8000) out, @error varchar(100) out)
As
Declare
@obj int
,@hr int
,@status int
,@msg varchar(255)
,@t nvarchar
exec @hr = sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT
-- exec @hr = sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT
if @hr <> 0 begin Raiserror('sp_OACreate MSXML2.ServerXMLHttp.3.0
failed', 16,1) return end
exec @hr = sp_OAMethod @obj, 'open', NULL, 'GET', @sUrl, false
if @hr <>0 begin set @msg = 'sp_OAMethod Open failed' goto eh end
exec @hr = sp_OAMethod @obj, 'setRequestHeader', NULL, 'Content-Type',
'application/x-www-form-urlencoded'
if @hr <>0 begin set @msg = 'sp_OAMethod setRequestHeader failed' goto
eh end
exec @hr = sp_OAMethod @obj, send, NULL, ''
if @hr <>0 begin set @msg = 'sp_OAMethod Send failed' goto eh end
exec @hr = sp_OAGetProperty @obj, 'status', @status OUT
if @hr <>0 begin set @msg = 'sp_OAMethod read status failed' goto
eh
end
if @status <> 200 begin set @msg = 'sp_OAMethod http status ' +
str(@status) goto eh end
exec @hr = sp_OAGetProperty @obj, 'responseText', @response OUT
if @hr <>0 begin set @msg = 'sp_OAMethod read response failed' goto
eh end
exec @hr = sp_OADestroy @obj
return
eh:
exec @hr = sp_OADestroy @obj
set @error = @msg
return
@t
GO
Вот так я выполняю его :
exec [HTTP_POST] 'http://test.ru/test.aspx'
Вот что получаю:
Msg 201, Level 16, State 4, Procedure HTTP_POST, Line 0
Procedure or function 'HTTP_POST' expects parameter '@response', which was not supplied.Помогите разобрать пожалуйста !!
24 августа 2015 г. 7:07
Ответы
-
Приложение/сервис на любой доступной вам платформе/языке, которое вычитывает эти URL-ы, валидирует и "пингует" их. Совершенно ни к чему делать это из самого mssql, которому, вообще говоря, и непосредственный доступ в Интернет не то чтобы часто действительно необходим.
Кроме того, я вам крайне рекомендую максимально обрезать права на доступ к БД со стороны этого приложения/сервиса, чтобы оно, не дай бог, ни до чего важного не добралось.
- Изменено Roman Sergeev 24 августа 2015 г. 16:00
- Предложено в качестве ответа Иван ПродановMicrosoft contingent staff, Moderator 31 августа 2015 г. 7:11
- Помечено в качестве ответа Иван ПродановMicrosoft contingent staff, Moderator 1 сентября 2015 г. 7:02
24 августа 2015 г. 15:59
Все ответы
-
Ну так вы определите переменные, в которые хотите получить response и error, и передайте их в процедуру при вызове
https://technet.microsoft.com/ru-ru/library/ms187004%28v=SQL.105%29.aspx
В целом же, выбранный вами способ работы с чьим-то WebAPI представляется одним из худших. Подумайте над выносом этого всего куда-то наружу.
- Изменено Roman Sergeev 24 августа 2015 г. 12:56
24 августа 2015 г. 12:56 -
Ошибки в этом коде я уже нашел.
Вопрос к Вам тогда такой: какой способ Вы посоветуете для такой задачи, как проверка валидности URL, лежащих в бд?
24 августа 2015 г. 13:00 -
Приложение/сервис на любой доступной вам платформе/языке, которое вычитывает эти URL-ы, валидирует и "пингует" их. Совершенно ни к чему делать это из самого mssql, которому, вообще говоря, и непосредственный доступ в Интернет не то чтобы часто действительно необходим.
Кроме того, я вам крайне рекомендую максимально обрезать права на доступ к БД со стороны этого приложения/сервиса, чтобы оно, не дай бог, ни до чего важного не добралось.
- Изменено Roman Sergeev 24 августа 2015 г. 16:00
- Предложено в качестве ответа Иван ПродановMicrosoft contingent staff, Moderator 31 августа 2015 г. 7:11
- Помечено в качестве ответа Иван ПродановMicrosoft contingent staff, Moderator 1 сентября 2015 г. 7:02
24 августа 2015 г. 15:59