SQL Server 访问URL 调用WebServer

Posted 每天进步多一点

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 


以上是关于SQL Server 访问URL 调用WebServer的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 R2 根据WSDL访问WebService

nginx 怎么多个路径访问一个静态目录,改成配置通用符号?

PetaPoco 访问SQL SERVER 存储过程

实现Sql server数据库的远程连接访问

云服务器安装nginx为啥通过公有ip不能访问文件

SQL Server connect to MySQL SQL Server通过LinkServer访问MySQL数据库