zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    PHP做ERP, CRM, CMS系统需要注意哪些地方
    java封装小实例
    java中数组的数组问题
    switch语句小练习
    java交换两个变量值a,b的多钟方法
    java中 i = i++ 的结果
    每日java基础知识(01)
    计算机存储负数以及int转byte时-128的出现
    python RSA 加密
    CentOS 7 安装 建立svn仓库 远程连接
  • 原文地址:https://www.cnblogs.com/lgx5/p/9695109.html
Copyright © 2011-2022 走看看