SQL Server 訪問URL 調用WebServer


以下整理的SQL Server中訪問URL地址的方法,並已封裝成存儲過程,可以實現POST/GET請求

SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
/**
存儲過程發起URL請求

啟用 Ole Automation Procedures 選項
exec sp_configure 'show advanced options',1;
go
reconfigure;
go
sp_configure 'Ole Automation Procedures',1;
go
reconfigure;
go
*/
ALTER PROC P_Url_SendRequest
    (
      @Url VARCHAR(8000) = '' ,
      @PostData VARCHAR(8000) = '' ,
      @ResponseText VARCHAR(8000) = '' OUTPUT
    )

AS
    SET NOCOUNT ON 


    DECLARE @ServiceUrl AS VARCHAR(1000) 
    DECLARE @UrlAddress VARCHAR(500) ,
        @ErrMsg VARCHAR(5000)


    SET @ServiceUrl = @Url 

    PRINT @ServiceUrl

    DECLARE @Object AS INT ,

        @status INT ,
        @returnText AS VARCHAR(8000) ,
        @HttpStatus VARCHAR(200) ,
        @HttpMethod VARCHAR(20) = 'get'

    IF ISNULL(@PostData, '') <> ''
        SET @HttpMethod = 'post'

    /*初始化對*/                   
    EXEC @status = sp_OACreate 'Msxml2.ServerXMLHTTP.3.0', @Object OUT;
    IF @status <> 0
        BEGIN  
            EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT
            SET @ErrMsg = '初始化對象失敗,' + @ErrMsg + ISNULL(@returnText, '')
            RAISERROR(@ErrMsg,16,-1)           
            RETURN 1
        END  

    /*創建鏈接*/  
    EXEC @status = sp_OAMethod @Object, 'open', NULL, @HttpMethod, @ServiceUrl,
        'false'
    IF @status <> 0
        BEGIN  
            EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT
            SET @ErrMsg = '創建連接失敗,' + @ErrMsg + ISNULL(@returnText, '')
            RAISERROR(@ErrMsg,16,-1)           
            RETURN 2
        END  

    SELECT  @HttpMethod

    IF @HttpMethod = 'post'
        BEGIN
            --EXEC @status = sp_OAMethod @Object, 'setRequestHeader',
            --    'Content-Type', 'application/x-www-form-urlencoded'   

            EXEC @status = sys.sp_OAMethod @Object, 'setRequestHeader', NULL,
                'Content-Type', 'application/x-www-form-urlencoded';
        END
    ELSE
        BEGIN

            EXEC @status = sp_OAMethod @Object, 'setRequestHeader', NULL,
                'Content-Type', 'text/xml; charset=gb2312'
            PRINT @status
        END


    IF @status <> 0
        BEGIN  
            EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT

            SET @ErrMsg = '設置RequestHeader屬性失敗,' + @ErrMsg
                + ISNULL(@returnText, '')
            RAISERROR(@ErrMsg,16,-1)           
            RETURN 2
        END  
    EXEC @status = sp_OAMethod @Object, 'send', NULL, @PostData
    IF @status <> 0
        BEGIN  
            EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT 
            SET @ErrMsg = '發送請求頭失敗,' + @ErrMsg + ISNULL(@returnText, '')
            RAISERROR(@ErrMsg,16,-1)           
            RETURN 3
        END 


    EXEC @status = sys.sp_OAGetProperty @Object, 'Status', @HttpStatus OUT;

    IF @status <> 0
        BEGIN
            EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT 
            SET @ErrMsg = '讀取[Status]屬性值失敗,' + @ErrMsg + ISNULL(@returnText,
                                                              '')
            RAISERROR(@ErrMsg,16,-1)           
            RETURN 3
    END

    IF @HttpStatus <> 200
        BEGIN
            SET @ErrMsg = '訪問錯誤,http狀態代碼,' + @HttpStatus
            RAISERROR(@ErrMsg,16,1);
            RETURN -6;
        END


    EXEC @status = sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
    IF @status <> 0
        BEGIN  
            EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT
            SET @ErrMsg = '獲取回復報文失敗,' + ISNULL(@ErrMsg, '')
                + ISNULL(@returnText, '') + ISNULL(@returnText, '')
            RAISERROR(@ErrMsg,16,-1)           
            RETURN 4
        END 
        EXEC @status = sp_OADestroy @Object
    IF @status <> 0
        BEGIN  
            EXEC sp_OAGetErrorInfo @Object, @ErrMsg OUT, @returnText OUT
            SET @ErrMsg = '釋放資源對象,' + @ErrMsg + ISNULL(@returnText, '')
            RAISERROR(@ErrMsg,16,-1)           
            RETURN 5
        END
RETURN
0 GO
declare @ServiceUrl as varchar(1000) 
declare @UrlAddress varchar(500)

--WebService地址:以http開頭,結尾帶斜杠,例如'http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/' 
set @UrlAddress = 'http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/'

declare @FunName varchar(50)
--WebService中調用的方法名:例如'getMobileCodeInfo'
set @FunName = 'getMobileCodeInfo'   

--以下參數對應WebService中4個參數的[參數名]
declare @P1 varchar(800),@P2 varchar(100)
set @P1 = 'mobileCode'
set @P2 = 'userid'

declare @P1_Value varchar(100),@P2_Value varchar(100)
set @P1_Value = '13800138000'
set @P2_Value = ''

set @ServiceUrl = @UrlAddress + @FunName + '?' + @P1 + '=' + @P1_Value +'&' + @P2 + '=' + @P2_Value                       
                  
Declare @Object as Int
Declare @ResponseText as Varchar(8000)
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'get',@ServiceUrl,'false'
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
     
Select @ResponseText     
Exec sp_OADestroy @Object
GO

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM