none
Выполнить http запрос. RRS feed

  • Вопрос

  • Есть скрипт, который почему то не выполняется:

    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, которому, вообще говоря, и непосредственный доступ в Интернет не то чтобы часто действительно необходим.
    Кроме того, я вам крайне рекомендую максимально обрезать права на доступ к БД со стороны этого приложения/сервиса, чтобы оно, не дай бог, ни до чего важного не добралось.

    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, которому, вообще говоря, и непосредственный доступ в Интернет не то чтобы часто действительно необходим.
    Кроме того, я вам крайне рекомендую максимально обрезать права на доступ к БД со стороны этого приложения/сервиса, чтобы оно, не дай бог, ни до чего важного не добралось.

    24 августа 2015 г. 15:59