SQL Server 访问URL 调用WebServer

原创 2016年03月10日 10:40:06

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

调用WebServer的实例请参考,另外一位兄弟的博客http://www.cnblogs.com/icycore/p/3532197.html

Server.UrlEncode与Server.UrlDecode(url传递中文的解决方案)

Server.UrlEncode与Server.UrlDecode(url传递中文的解决方案)程序设计ASP.NET2010-10-10 20:57:46阅读81评论0  字号:大中小 订阅1.设置w...
  • ypzgq
  • ypzgq
  • 2011年03月16日 16:53
  • 11742

SQL Server 访问发送Http请求

-- 通用读取获取数据存储过程 --开启Sql Server 通讯配置-- sp_configure 'show advanced options', 1; GO RECONF...
  • Z_Y_J_1_2_3
  • Z_Y_J_1_2_3
  • 2014年04月13日 13:56
  • 564

SQL Server 访问发送Http请求

-- 通用读取获取数据存储过程 --开启Sql Server 通讯配置-- sp_configure 'show advanced options', 1; GO RECONFIGURE;...
  • DiyHzp
  • DiyHzp
  • 2015年11月29日 01:33
  • 3179

sqlserver调用http请求

首先: 开启使用扩展存储过程权限 sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole...
  • djy18178
  • djy18178
  • 2014年03月22日 16:22
  • 859

sqlserver使用存储过程发送http请求

declare @ServiceUrl as varchar(1000)  declare @UrlAddress varchar(500) --api接口地址:以http开头,结尾带斜杠,例...
  • u010485134
  • u010485134
  • 2017年02月28日 16:28
  • 543

对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析

对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析   Oracle Database Oracle Database,又名Oracle RDBMS,或简称...
  • ranran_5300
  • ranran_5300
  • 2015年08月31日 09:01
  • 7590

SQL Server 定时访问url激活数据同步

XP_cmdshel SQL Server 定时访问url激活数据同步
  • ziren
  • ziren
  • 2014年05月20日 08:20
  • 1636

一个简单的Httpserver以及获取post提交的参数

以下代码是我从网上找来的,但是一直获取不到post提交的参数,最后经过我的修改,终于可以得到post提交的数据。因为本人在网上找了很久都没有找到相关的资料,特意发出来希望能帮到大家,有什么不足的地方还...
  • u014425096
  • u014425096
  • 2017年05月26日 15:04
  • 300

存储过程的HTTP post

create or replace procedure MAS_ADMIN.receive_SendForm is url VARCHAR2(1000); REQ UTL_HTTP.REQ...
  • hutao1101175783
  • hutao1101175783
  • 2015年03月12日 11:04
  • 1779

快速开发平台ServerURL()使用介绍

度量快速开发平台中,有很多非常有意思的方法提供给二次开发人员使用,笔者从实际使用的案例中就使用过多个很不错的方法,本次重点给大家介绍一下ServerURL()方法的使用场景及用法。    ...
  • leejunki822
  • leejunki822
  • 2015年10月31日 14:13
  • 245
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server 访问URL 调用WebServer
举报原因:
原因补充:

(最多只允许输入30个字)