22

我想从 SQL 服务器向 Tomcat 服务器发送一个 HTTP 请求。我已经在 Tomcat 服务器中安装了 SQL Server 2012 Express 和非 .NET 应用程序。我已经经历过这个,比如从 SQL 服务器发出 HTTP 请求

正如上面文章中所说,“必须在服务器上安装 COM 对象 WinHttp.WinHttpRequest.5.1,一些典型的变体是 WinHttp.WinHttpRequest.5”。我已经从winhttp 下载链接下载了winhttp.zip,在 zip 文件夹中找到了 winhttp.dll 并C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2\MSSQL\Binn按照此msdn 链接中的建议将其粘贴。

遵循同样的建议,我在 SSMS 中执行了以下行:

sp_addextendedproc 'GetHttp',
 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2\MSSQL\Binn\winhttp.dll';

我还在 SSMS 中执行了以下代码,如“从 SQL 服务器链接发出 HTTP 请求”中所述:

Alter function GetHttp
(
@url varchar(8000)      
)
returns varchar(8000)
as
BEGIN
DECLARE @win int 
DECLARE @hr  int 
DECLARE @text varchar(8000)

EXEC @hr=sp_OACreate 'WinHttp.WinHttpRequest.5.1',@win OUT 
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr=sp_OAMethod @win, 'Open',NULL,'GET',@url,'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr=sp_OAMethod @win,'Send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr=sp_OAGetProperty @win,'ResponseText',@text OUTPUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr=sp_OADestroy @win 
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 

RETURN @text
END

然后我得到错误

消息 2010,级别 16,状态 1,过程 GetHttp,第 2 行
无法对“GetHttp”执行更改,因为它是不兼容的对象类型。

我不知道如何调用该函数来发送 HTTP 请求。我认为它是这样的GetHttp('http://www.google.co.in/')

我错过了什么?

4

7 回答 7

19

我也得到了另一个答案。我创建了如下程序

CREATE procedure HTTP_Request( @sUrl varchar(200))
As


Declare
@obj int
,@hr int
,@msg varchar(255)


 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, 'POST', @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_OADestroy @obj
return
eh:
exec @hr = sp_OADestroy @obj
Raiserror(@msg, 16, 1)
return
GO

我用 url 调用了存储过程

USE [master]
GO

 DECLARE    @return_value int

EXEC    @return_value = [dbo].[HTTP_Request]
    @sUrl = N'url'

SELECT  'Return Value' = @return_value

GO

谢谢你们让我做这个。

于 2013-07-03T06:52:30.233 回答
6

我得到了powershell的回答。我所做的是在 sql server 中打开 powershell 然后我在 powershell 中执行了以下代码。

$http_Request= New-Object system.Net.WebClient;
$Result = $http_Request.downloadString("url")
于 2013-07-03T06:43:37.883 回答
5

这真的帮助了我@niren。

以为我会发布我的修正,将其置于标量函数中并允许您获得服务响应。唯一的缺点是标量函数不能引发错误,因此需要考虑在其他地方捕获。

CREATE function [dbo].[fn_HttpPOST]
(
    @sUrl varchar(8000)      
)
returns varchar(8000)
as
BEGIN
    DECLARE @obj int 
    DECLARE @hr  int 
    DECLARE @msg varchar(8000)    


    exec @hr = sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT
    if @hr <> 0 begin set @Msg = 'sp_OACreate MSXML2.ServerXMLHttp.3.0 failed' return @Msg end

    exec @hr = sp_OAMethod @obj, 'open', NULL, 'POST', @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,'ResponseText',@msg OUTPUT
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @Obj

    exec @hr = sp_OADestroy @obj

    RETURN @msg

    eh:
    exec @hr = sp_OADestroy @obj
    return @msg
END
于 2014-12-11T19:03:07.790 回答
4

为我自己的需要制作了这个怪物

CREATE PROCEDURE [dbo].[RequestHttpWebService]
    @Url varchar(1024),
    @HttpMethod varchar(10),
    @ParamsValues varchar(1024),    -- param1=value&param2=value
    @SoapAction varchar(1024) = null
AS
BEGIN
    SET NOCOUNT ON;

    if @HttpMethod in ('get','GET') and len(@ParamsValues) > 0
    begin
        set @Url = @Url + '?' + @ParamsValues
    end

    declare @obj int
        ,@response varchar(8000)
        ,@responseXml xml
        ,@status varchar(50)
        ,@statusText varchar(1024)
        ,@method varchar(10) = (case when @HttpMethod in ('soap','SOAP') then 'POST' else @HttpMethod end)

    exec sp_OACreate 'MSXML2.ServerXMLHttp', @obj out
    exec sp_OAMethod @obj, 'Open', null, @method, @Url, false

    if @HttpMethod in ('get','GET')
    begin
        exec sp_OAMethod @obj, 'send'
    end
    else if @HttpMethod in ('post','POST')
    begin
        exec sp_OAMethod @obj, 'setRequestHeader', null, 'Content-Type', 'application/x-www-form-urlencoded'
        exec sp_OAMethod @obj, 'send', null, @ParamsValues
    end
    else if @HttpMethod in ('soap','SOAP')
    begin
        if @SoapAction is null
            raiserror('@SoapAction is null', 10, 1)

        declare @host varchar(1024) = @Url
        if @host like 'http://%'
            set @host = right(@host, len(@host) - 7)
        else if @host like 'https://%'
            set @host = right(@host, len(@host) - 8)

        if charindex(':', @host) > 0 and charindex(':', @host) < charindex('/', @host)
            set @host = left(@host, charindex(':', @host) - 1)
        else 
            set @host = left(@host, charindex('/', @host) - 1)

        declare @envelope varchar(8000) = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><{action} xmlns="http://tempuri.org/">{params}</{action}></soap:Body></soap:Envelope>'
        declare @params varchar(8000) = '' 

        WHILE LEN(@ParamsValues) > 0
        BEGIN
            declare @param varchar(256),
                    @value varchar(256)

            IF charindex('&', @ParamsValues) > 0
            BEGIN

                SET @param = left(@ParamsValues, charindex('&', @ParamsValues) - 1)
                set @value = RIGHT(@param, len(@param) - charindex('=', @param))
                set @param = left(@param, charindex('=', @param) - 1)
                set @params = @params + '<' + @param + '>' + @value + '</'+ @param + '>'
                SET @ParamsValues = right(@ParamsValues, LEN(@ParamsValues) - LEN(@param + '=' + @value + '&'))
            END
            ELSE
            BEGIN
                set @value = RIGHT(@ParamsValues, len(@ParamsValues) - charindex('=', @ParamsValues))
                set @param = left(@ParamsValues, charindex('=', @ParamsValues) - 1)

                set @params = @params + '<' + @param + '>' + @value + '</'+ @param + '>'
                SET @ParamsValues = NULL
            END
        END

        set @envelope = replace(@envelope, '{action}', @SoapAction)
        set @envelope = replace(@envelope, '{params}', @params)

        set @SoapAction = 'http://tempuri.org/' + @SoapAction

        print @host
        print @SoapAction
        print @envelope

        exec sp_OAMethod @obj, 'setRequestHeader', null, 'Content-Type', 'text/xml; charset=utf-8'
        exec sp_OAMethod @obj, 'setRequestHeader', null, 'Host', @host
        exec sp_OAMethod @obj, 'setRequestHeader', null, 'SOAPAction', @SoapAction
        exec sp_OAMethod @obj, 'send', null, @envelope
    end

    exec sp_OAGetProperty @obj, 'responseText', @response out
    exec sp_OADestroy @obj

    select @status as [status], @statusText as [statusText], @response as [response]

END

GO
于 2017-02-14T15:58:10.817 回答
4

截屏

这里最灵活的方法是使用 CLR 用户定义函数,您可以在 C# 中简单地定义如下;

[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString http(SqlString url)
{
    var wc = new WebClient();
    var html = wc.DownloadString(url.Value);
    return new SqlString (html);
}

完整的安装说明在这里 - https://github.com/infiniteloopltd/SQLHttp

于 2019-09-17T16:53:58.793 回答
2

正确的方法是构建一个 CLR,其中将包含一个 C# 代码来发送 http/s 请求,因为我们希望避免使用 sp_OACreate 之类的旧方法可能导致的内存泄漏和安全问题。

例如 :

     var request = 
   (HttpWebRequest)WebRequest.Create("http://www.example.com. /recepticle.aspx");
    var postData = "thing1=hello";
    postData += "&amp;amp;amp;amp;amp;thing2=world";
    var data = Encoding.ASCII.GetBytes(postData);
    request.Method = "POST";
   request.ContentType = "application/x-www-form-urlencoded";
   request.ContentLength = data.Length;
   using (var stream = request.GetRequestStream())
    {
    stream.Write(data, 0, data.Length);
     }
    var response = (HttpWebResponse)request.GetResponse();
   var responseString = new     StreamReader(response.GetResponseStream()).ReadToEnd();`

使用 sp_OACreate 的安全性较低,而您可以对 CLR 进行签名和检查。

于 2019-10-10T10:59:44.587 回答
0

使用这些代码,您可以通过 Httprequest 从网页中读取 Html 代码或运行 SOAP Web 服务。

从 SQLserver 发出 HTTP 请求。

通过 SQL Server 发送 HTTP 请求。

从 SQL Server TSQL 存储过程调用 SOAP Web 服务。

将 Http 响应保存到文件。

DROP PROCEDURE IF EXISTS [dbo].[stp_HttpRequest]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--1400/02/16-18:06
--Mahmood Khezrian
--Sp For Get Data (Page Html Or Webservice Result) From Web.
--Can Run Any Method (Get - Post , ....)
--Can Run Soap WebService
CREATE   proc [dbo].[stp_HttpRequest] 
     @URI           varchar(max) = N''     
    ,@MethodName    [sysname] = N'Post'
    ,@RequestBody   nvarchar(max) = N''             --Neded For Run Soap Webservices , Soap XML Data Parameters
    ,@SoapAction    varchar(500)                    --Neded For Run Soap Webservices
    ,@UserName      [sysname]                       --(Optonal) Domain\UserName or UserName 
    ,@Password      [sysname]                       --(Optonal)
    ,@ResponseText  nvarchar(max) output            --Return Responce Data With This Variable
    ,@ExportToFile  nvarchar(max)=Null              --If Pass This Parameter , After Run Request Save Responce Data (Returned Value) To File.
/*With ENCRYPTION*/ As
    Set NoCount ON;
    Declare @ErrorCode  int
    Set @ErrorCode = -1
    /*Begin Transaction stp_HttpRequest*/
    Begin Try
        if (@MethodName = '')
            RaisError (N'Method Name must be set.',16,1);

        if (Patindex(N'%{RandomFileName}%',@ExportToFile)>0) Begin
            Declare @FileName [sysname]
            Set @FileName = Format(GetDate(),N'yyyyMMddHHmmss')+N'_'+Replace(NewID(),'-','')
            Set @ExportToFile = Replace(@ExportToFile,N'{RandomFileName}',@FileName)
        End--if
        Set @RequestBody = REPLACE(@RequestBody,'&','&amp;')
        Set @ResponseText = N'FAILED'

        Declare @objXmlHttp int
        Declare @hResult int
        Declare @source varchar(255), @desc varchar(255) 

        Set @ErrorCode = -100
        Exec @hResult = sp_OACreate N'MSXML2.ServerXMLHTTP', @objXmlHttp OUT
        IF (@hResult <> 0 ) Begin
            Exec sp_OAGetErrorInfo @objXmlHttp, @source OUT, @desc OUT
            Select hResult = convert(varbinary(4), @hResult), 
                        source = @source, 
                        description = @desc, 
                        FailPoint = N'Create failed MSXML2.ServerXMLHTTP', 
                        MedthodName = @MethodName 
            RaisError (N'Create failed MSXML2.ServerXMLHTTP.',16,1);
        End--if

        Set @ErrorCode = -2
        -- open the destination URI with Specified method 
        Exec @hResult = sp_OAMethod @objXmlHttp, N'open', Null, @MethodName, @URI, N'false', @UserName, @Password
        if (@hResult <> 0 ) Begin
            Exec sp_OAGetErrorInfo @objXmlHttp, @source OUT, @desc OUT
            Select hResult = convert(varbinary(4), @hResult), 
                source = @source, 
                description = @desc, 
                FailPoint = N'Open failed', 
                MedthodName = @MethodName 
            RaisError (N'Open failed.',16,1);
        End--if

        Set @ErrorCode = -300
        -- Set Timeout 
        --Exec @hResult = sp_OAMethod @objXmlHttp, N'setTimeouts', Null, 5000,5000,15000,30000
        Exec @hResult = sp_OAMethod @objXmlHttp, N'setTimeouts', Null, 10000,10000,30000,60000
        if (@hResult <> 0 ) Begin
            Exec sp_OAGetErrorInfo @objXmlHttp, @source OUT, @desc OUT
            Select hResult = convert(varbinary(4), @hResult), 
                source = @source, 
                description = @desc, 
                FailPoint = N'SetTimeouts failed', 
                MedthodName = @MethodName 
            RaisError (N'SetTimeouts failed.',16,1);
        End--if

        Set @ErrorCode = -400
        -- set request headers 
        Exec @hResult = sp_OAMethod @objXmlHttp, N'setRequestHeader', Null, N'Content-Type', 'text/xml;charset=UTF-8'
        if (@hResult <> 0 ) Begin
            Exec sp_OAGetErrorInfo @objXmlHttp, @source OUT, @desc OUT
            Select      hResult = convert(varbinary(4), @hResult), 
                source = @source, 
                description = @desc, 
                FailPoint = N'SetRequestHeader failed', 
                MedthodName = @MethodName 
            RaisError (N'SetRequestHeader (Content-Type) failed.',16,1);
        End--if

        Set @ErrorCode = -500
        -- set soap action 
        if (IsNull(@SoapAction,'')!='') Begin
            Exec @hResult = sp_OAMethod @objXmlHttp, N'setRequestHeader', Null, N'SOAPAction', @SoapAction 
            IF (@hResult <> 0 ) Begin
                Exec sp_OAGetErrorInfo @objXmlHttp, @source OUT, @desc OUT
                Select hResult = convert(varbinary(4), @hResult), 
                    source = @source, 
                    description = @desc, 
                    FailPoint = N'SetRequestHeader (SOAPAction) failed', 
                    MedthodName = @MethodName 
                RaisError (N'SetRequestHeader failed.',16,1);
            End--if
        End--if

        Set @ErrorCode = -600
        --Content-Length
        Declare @len int
        set @len = len(@RequestBody) 
        Exec @hResult = sp_OAMethod @objXmlHttp, N'setRequestHeader', Null, N'Content-Length', @len 
        IF (@hResult <> 0 ) Begin
            Exec sp_OAGetErrorInfo @objXmlHttp, @source OUT, @desc OUT
            Select hResult = convert(varbinary(4), @hResult), 
                source = @source, 
                description = @desc, 
                FailPoint = N'SetRequestHeader (Content-Length) failed', 
                MedthodName = @MethodName 
            RaisError (N'SetRequestHeader failed.',16,1);
        End--if

        -- if you have headers in a Table called RequestHeader you can go through them with this 
        /* 
        Set @ErrorCode = -700
        Declare @HeaderKey varchar(500), @HeaderValue varchar(500) 
        Declare RequestHeader CURSOR
        LOCAL FAST_FORWARD 
        FOR
              Select      HeaderKey, HeaderValue 
              FROM RequestHeaders 
              WHERE       Method = @MethodName 
        OPEN RequestHeader 
        FETCH NEXT FROM RequestHeader 
        INTO @HeaderKey, @HeaderValue 
        WHILE @@FETCH_STATUS = 0 
        BEGIN
            Set @ErrorCode = -800
              --Select @HeaderKey, @HeaderValue, @MethodName 
              Exec @hResult = sp_OAMethod @objXmlHttp, 'setRequestHeader', Null, @HeaderKey, @HeaderValue 
              IF @hResult <> 0 
              BEGIN
                    Set @ErrorCode = -900
                    Exec sp_OAGetErrorInfo @objXmlHttp, @source OUT, @desc OUT
                    Select      hResult = convert(varbinary(4), @hResult), 
                          source = @source, 
                          description = @desc, 
                          FailPoint = 'SetRequestHeader failed', 
                          MedthodName = @MethodName 
                    RaisError (N'SetRequestHeader failed.',16,1);
              END
              FETCH NEXT FROM RequestHeader 
              INTO @HeaderKey, @HeaderValue 
        END
        CLOSE RequestHeader 
        DEALLOCATE RequestHeader 
        */ 

        Set @ErrorCode = -1000
        -- send the request 
        Exec @hResult = sp_OAMethod @objXmlHttp, N'send', Null, @RequestBody 
        IF (@hResult <> 0 ) Begin
            Exec sp_OAGetErrorInfo @objXmlHttp, @source OUT, @desc OUT
            Select hResult = convert(varbinary(4), @hResult), 
                source = @source, 
                description = @desc, 
                FailPoint = N'Send failed', 
                MedthodName = @MethodName 
            RaisError (N'Send failed.',16,1);
        End--if
        Declare @StatusText varchar(1000), @Status varchar(1000) 
        
        Set @ErrorCode = -1100
        -- Get status text 
        Exec sp_OAGetProperty @objXmlHttp, N'StatusText', @StatusText out
        Exec sp_OAGetProperty @objXmlHttp, N'Status', @Status out
        Select @Status As Status, @StatusText As statusText, @MethodName As MethodName
        -- Get response text 
        Declare @Json Table (Result ntext)
        Declare @Xml xml

        Set @ErrorCode = -1200
        Insert  @Json(Result)
        Exec @hResult = dbo.sp_OAGetProperty @objXmlHttp, N'ResponseText'

        Set @ErrorCode = -1300
        --Exec @hResult = dbo.sp_OAGetProperty @objXmlHttp, N'ResponseText', @ResponseText out
        IF (@hResult <> 0 ) Begin
            Exec sp_OAGetErrorInfo @objXmlHttp, @source OUT, @desc OUT
            Select hResult = convert(varbinary(4), @hResult), 
                source = @source, 
                description = @desc, 
                FailPoint = N'ResponseText failed', 
                MedthodName = @MethodName 
            RaisError (N'ResponseText failed.',16,1);
        END--if
        
        Set @ErrorCode = -1400
        --Set @ResponseText=Replicate(Convert(varchar(max),N'1'),1000000)
        if (IsNull(@SoapAction,'')!='') Begin
            Select @Xml=CAST(Replace(Replace(Replace(Cast(Result As nvarchar(max)),N'utf-8',N'utf-16'),N'.0,',N','),N'.00,',N',') As XML)
            From @Json
            
            Set @ErrorCode = -1500
            Select @ResponseText = x.Rec.query(N'./*').value('.',N'nvarchar(max)')
            From @Xml.nodes(N'.') as x(Rec)
            
        End--if 
        Else Begin
            Select @ResponseText= Result From @Json
        End--Else

        Set @ErrorCode = -1600
        --Export To File
        if (IsNull(@ExportToFile,'')!='') Begin
            Declare @objToFile int
            Declare @FileID     int

            Set @ErrorCode = -1700
            --Create Object
            Exec @hResult = sp_OACreate 'Scripting.FileSystemObject', @objToFile OUT 
            IF (@hResult <> 0 ) Begin
                Exec sp_OAGetErrorInfo @objXmlHttp, @source OUT, @desc OUT
                Select hResult = convert(varbinary(4), @hResult), 
                            source = @source, 
                            description = @desc, 
                            FailPoint = N'Create failed Scripting.FileSystemObject', 
                            MedthodName = @MethodName 
                RaisError (N'Create failed Scripting.FileSystemObject.',16,1);
            End--if

            Set @ErrorCode = -1800
            --Create Or Open File
            Exec @hResult = sp_OAMethod @objToFile, 'OpenTextFile'  , @FileID OUT, @ExportToFile,2,1,-1
            if (@hResult <> 0 ) Begin
                Exec sp_OAGetErrorInfo @objXmlHttp, @source OUT, @desc OUT
                Select hResult = convert(varbinary(4), @hResult), 
                    source = @source, 
                    description = @desc, 
                    FailPoint = N'OpenTextFile failed', 
                    MedthodName = @MethodName 
                RaisError (N'OpenTextFile failed.',16,1);
            End--if

            Set @ErrorCode = -1900
            --Write Data To File
            Exec @hResult = sp_OAMethod  @FileID, 'Write', Null, @ResponseText
            if (@hResult <> 0 ) Begin
                Exec sp_OAGetErrorInfo @objXmlHttp, @source OUT, @desc OUT
                Select hResult = convert(varbinary(4), @hResult), 
                    source = @source, 
                    description = @desc, 
                    FailPoint = N'Write To File failed', 
                    MedthodName = @MethodName 
                RaisError (N'Write To File failed.',16,1);
            End--if

            Set @ErrorCode = -2000
            --Close File
            Exec sp_OAMethod  @FileID, 'Close'
            --Delete Objects
            Exec sp_OADestroy @FileID 
            Exec sp_OADestroy @objToFile 
            
        End--if

        Set @ErrorCode = 0
        /*If (@@TranCount > 0)
            Commit Transaction stp_HttpRequest*/
    End Try
    Begin Catch
        /*If (@@TranCount > 0)
            Rollback Transaction stp_HttpRequest*/
        Exec [dbo].[stp_GetErrorInfo]
    End Catch
    Exec sp_OADestroy @objXmlHttp
    Return @ErrorCode
GO
--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
--Example For Run Soap WebService
DECLARE @RC int
DECLARE @URI varchar(max)
DECLARE @MethodName sysname
DECLARE @RequestBody nvarchar(max)
DECLARE @SoapAction varchar(500)
DECLARE @UserName sysname=''
DECLARE @Password sysname=''
DECLARE @ResponseText nvarchar(max)
DECLARE @intA   nvarchar(10)
DECLARE @intB   nvarchar(10)

Set @intA = N'100'
Set @intB = N'200'


Set @URI = N'http://www.dneonline.com/calculator.asmx'
Set @MethodName = N'POST'
Set @RequestBody = 
N'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:Body>
        <Add xmlns="http://tempuri.org/"><intA>'+@intA+'</intA><intB>'+@intB+'</intB></Add>
        </soap:Body>
    </soap:Envelope>'
Set @SoapAction = N'http://tempuri.org/Add'


EXECUTE @RC = [dbo].[stp_HttpRequest] 
   @URI
  ,@MethodName
  ,@RequestBody
  ,@SoapAction
  ,@UserName
  ,@Password
  ,@ResponseText OUTPUT

Print @ResponseText
Print Len(@ResponseText)
Go
--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//--//
--Example For Feach Data From Website
DECLARE @RC int
DECLARE @URI varchar(max)
DECLARE @MethodName sysname
DECLARE @RequestBody nvarchar(max)
DECLARE @SoapAction varchar(500)
DECLARE @UserName sysname
DECLARE @Password sysname
DECLARE @ResponseText nvarchar(max)
Declare @ExportToFile   nvarchar(max)



Set @URI = N'https://stackoverflow.com/questions/17407338/how-can-i-make-http-request-from-sql-server'
Set @MethodName = N'GET'
Set @RequestBody = N''
Set @SoapAction = N''
Set @ExportToFile = N'C:\Temp\Export\{RandomFileName}.html'

EXECUTE @RC = [dbo].[stp_HttpRequest] 
   @URI
  ,@MethodName
  ,@RequestBody
  ,@SoapAction
  ,@UserName
  ,@Password
  ,@ResponseText OUTPUT
  ,@ExportToFile

Print @ResponseText
Print Len(@ResponseText)
Go
于 2021-05-06T15:26:08.367 回答