Advertisement

SQL使用SP_OA调用外部HTTP请求

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本文章介绍如何利用SQL中的系统存储过程SP_OA来执行对外部HTTP服务的请求,并处理返回的数据。适合需要在数据库层直接操作网络接口的开发者阅读和学习。 ```sql DECLARE @Object int; DECLARE @HR int; DECLARE @Property nvarchar(255); DECLARE @Return nvarchar(255); DECLARE @Source nvarchar(255), @Desc nvarchar(255); DECLARE @httpStatus int; DECLARE @response varchar(8000); -- 创建 OLE 对象的实例 EXEC @HR = sp_OACreate MSXML2.XMLHTTP.6.0,@Object OUT; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR(Error Creating COM Component %x, %s, %s,16,1, @HR, @Source, @Desc); GOTO END_ROUTINE END -- 打开连接 EXEC @HR = sp_OAMethod @Object,open,GET,http://localhost:1728/HttpServer/submit.aspx,FALSE; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR(Open %x, %s, %s,16,1, @HR, @Source, @Desc); GOTO CLEANUP END -- 设置请求头 EXEC @HR = sp_OAMethod @Object,setRequestHeader,Content-Type,text/xml; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR(setRequestHeader %x, %s, %s,16,1, @HR, @Source, @Desc); GOTO CLEANUP END -- 发送请求 EXEC @HR = sp_OAMethod @Object,send; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR(send %x, %s, %s,16,1, @HR, @Source, @Desc); GOTO CLEANUP END -- 获取 readyState 属性值 EXEC @HR = sp_OAGetProperty @Object,readyState,@httpStatus OUT; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR(readyState %x, %s, %s,16,1, @HR, @Source, @Desc); GOTO CLEANUP END -- 验证 readyState 是否为 4(表示请求完成) IF @httpStatus <> 4 BEGIN RAISERROR(readyState http status bad,16,1); GOTO CLEANUP END -- 获取 HTTP 状态码 EXEC @HR = sp_OAGetProperty @Object,status,@httpStatus OUT; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR(getstatus %x, %s, %s,16,1, @HR, @Source, @Desc); GOTO CLEANUP END -- 验证 HTTP 状态码是否为 200(表示请求成功) IF @httpStatus <> 200 BEGIN PRINT CAST(@httpStatus AS varchar); RAISERROR(Open http status bad,16,1); GOTO CLEANUP END -- 获取响应文本 EXEC @HR = sp_OAGetProperty @Object,responseText,@response OUT; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR(responseText %x, %s, %s,16,1, @HR, @Source, @Desc); GOTO CLEANUP END PRINT @response; CLEANUP: BEGIN EXEC @HR = sp_OADestroy @Object; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; SELECT HR = convert(varbinary(4),@HR), Source=@Source, Description=@Desc; END END END_ROUTINE: RETURN; ``` 这段代码使用了SQL Server的sp_OA系列存储过程来创建和操作COM对象,通过`MSXML2.XMLHTTP.6.0` COM组件实现了一个简单的HTTP请求,并对可能产生的错误进行了详细的处理。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • SQL使SP_OAHTTP
    优质
    本文章介绍如何利用SQL中的系统存储过程SP_OA来执行对外部HTTP服务的请求,并处理返回的数据。适合需要在数据库层直接操作网络接口的开发者阅读和学习。 ```sql DECLARE @Object int; DECLARE @HR int; DECLARE @Property nvarchar(255); DECLARE @Return nvarchar(255); DECLARE @Source nvarchar(255), @Desc nvarchar(255); DECLARE @httpStatus int; DECLARE @response varchar(8000); -- 创建 OLE 对象的实例 EXEC @HR = sp_OACreate MSXML2.XMLHTTP.6.0,@Object OUT; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR(Error Creating COM Component %x, %s, %s,16,1, @HR, @Source, @Desc); GOTO END_ROUTINE END -- 打开连接 EXEC @HR = sp_OAMethod @Object,open,GET,http://localhost:1728/HttpServer/submit.aspx,FALSE; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR(Open %x, %s, %s,16,1, @HR, @Source, @Desc); GOTO CLEANUP END -- 设置请求头 EXEC @HR = sp_OAMethod @Object,setRequestHeader,Content-Type,text/xml; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR(setRequestHeader %x, %s, %s,16,1, @HR, @Source, @Desc); GOTO CLEANUP END -- 发送请求 EXEC @HR = sp_OAMethod @Object,send; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR(send %x, %s, %s,16,1, @HR, @Source, @Desc); GOTO CLEANUP END -- 获取 readyState 属性值 EXEC @HR = sp_OAGetProperty @Object,readyState,@httpStatus OUT; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR(readyState %x, %s, %s,16,1, @HR, @Source, @Desc); GOTO CLEANUP END -- 验证 readyState 是否为 4(表示请求完成) IF @httpStatus <> 4 BEGIN RAISERROR(readyState http status bad,16,1); GOTO CLEANUP END -- 获取 HTTP 状态码 EXEC @HR = sp_OAGetProperty @Object,status,@httpStatus OUT; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR(getstatus %x, %s, %s,16,1, @HR, @Source, @Desc); GOTO CLEANUP END -- 验证 HTTP 状态码是否为 200(表示请求成功) IF @httpStatus <> 200 BEGIN PRINT CAST(@httpStatus AS varchar); RAISERROR(Open http status bad,16,1); GOTO CLEANUP END -- 获取响应文本 EXEC @HR = sp_OAGetProperty @Object,responseText,@response OUT; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR(responseText %x, %s, %s,16,1, @HR, @Source, @Desc); GOTO CLEANUP END PRINT @response; CLEANUP: BEGIN EXEC @HR = sp_OADestroy @Object; IF @HR <> 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; SELECT HR = convert(varbinary(4),@HR), Source=@Source, Description=@Desc; END END END_ROUTINE: RETURN; ``` 这段代码使用了SQL Server的sp_OA系列存储过程来创建和操作COM对象,通过`MSXML2.XMLHTTP.6.0` COM组件实现了一个简单的HTTP请求,并对可能产生的错误进行了详细的处理。
  • 使VB发送HTTP
    优质
    本教程介绍如何利用Visual Basic编程语言编写代码来发送和接收HTTP请求,帮助开发者实现网页数据抓取或自动化交互等功能。 VB发送HTTP请求并返回网络请求的结果,其中还包含了各种格式转换的代码。
  • 使CURL发送HTTP
    优质
    简介:本文介绍了如何利用cURL工具通过命令行发送各种类型的HTTP请求(如GET、POST等),并解释了其在网页抓取和API测试中的应用。 curl是一个命令行工具,用于从服务器传输数据或向其发送数据。它支持多种协议,包括HTTP、HTTPS、FTP等,并且可以使用各种不同的方法来执行请求,如GET, POST, PUT 等。 使用curl的方法如下: 1. GET 请求:`curl -X GET http://example.com` 2. POST 请求:`curl -X POST -d param1=value1¶m2=value2 http://example.com/api` 3. PUT 请求:`curl -X PUT -H Content-Type: application/json -d {key:value} http://example.com/resource` 这些示例展示了如何使用curl发送不同类型的HTTP请求。
  • 使curl进行HTTP POST
    优质
    本教程详细介绍如何使用curl命令行工具发送HTTP POST请求,包括设置URL、数据字段和头部信息等。 使用C++代码并通过curl库实现HTTP POST请求的方法如下所述:首先需要包含必要的头文件,并初始化curl会话。然后设置URL和其他必要选项,如POST数据、超时时间等。接下来执行实际的POST操作并处理返回的数据或错误信息。最后别忘了清理资源和关闭curl会话以释放内存。
  • 纯PB 12.6 (PowerBuilder 12.5) POST HTTP
    优质
    本教程详细介绍如何使用PowerBuilder 12.5编写代码来发起HTTP POST请求,适用于需要通过编程方式与Web服务交互的开发者。 在IT行业中,PowerBuilder(简称PB)是一款历史悠久的可视化编程工具,主要用于开发企业级的应用程序。标题中的“纯PB12.6(Powerbuild 12.5)调用 post http”指的是利用PowerBuilder 12.6版本进行HTTP POST请求的方法。现代Web应用程序中发送POST请求是常见的数据交互方式,用于向服务器提交数据,例如文件上传或执行数据库操作。 描述中的“纯PB12.6调用 post http”进一步强调了仅使用PowerBuilder本身的功能来实现HTTP通信,而不是依赖外部库或插件。这涉及到PowerBuilder的网络功能和其内置的Web服务支持。 在PowerBuilder中,可以利用DataWindow对象或者自定义脚本代码来完成HTTP POST请求。例如,DataWindow能够处理HTTP请求,尤其是在数据以表格形式存在时更为有用。而自定义脚本通常涉及使用ISAPI(Internet Server Application Programming Interface)扩展或.NET Java桥接技术来实现更灵活的HTTP通信。 标签“powerbuilder http”表明讨论的核心是如何在PowerBuilder中集成HTTP协议。HTTP是互联网上应用最广泛的一种网络协议,它规定了客户端与服务器之间数据交换的方式和格式。 提供的文件列表可能包括: - 界面.bmp:展示如何设计用户界面的截图。 - A.bmp:另一个相关界面元素或示例的截图。 - 文件上传服务接口.doc:详细说明如何设计并实现文件上传服务,涵盖POST请求的具体参数以及服务器端接收逻辑等信息。 - http.usr.opt: PowerBuilder用户的选项设置文件,可能包含有关HTTP连接配置的信息。 - http.pbl: 包含与HTTP通信相关的对象和函数的PowerBuilder库文件。 - http.pbt:记录项目结构及成员信息的团队文件,用于协同开发相关功能。 - http.pbw:保存项目的组织状态的工作区文件,帮助开发者快速定位到HTTP调用代码。 实际创建一个HTTP POST请求通常包括以下步骤: 1. 创建HTTP连接对象; 2. 设置必要的请求头(如Content-Type)和其他相关信息; 3. 准备POST数据,并根据需要进行编码或构造为multipart-form-data格式; 4. 发送POST请求并获取响应信息; 5. 解析返回的数据,处理相应结果。 开发者可以根据文件上传服务接口文档中的指导,结合PowerBuilder的库和工作区文件来实现HTTP POST请求并与服务器端交互。利用PowerBuilder强大的图形化界面设计功能及脚本支持可以方便地将此功能集成到应用程序中。
  • 使libcurl的HTTP异步方法
    优质
    本篇文章主要讲解如何利用libcurl库实现HTTP异步请求的方法,提高程序效率和响应速度。适合对网络编程感兴趣的开发者阅读。 最近因工作需求需要实现C++中的异步HTTP请求功能,并决定使用libcurl库来完成这一任务。然而我发现libcurl的编译过程较为复杂,耗费了不少时间才解决相关问题。 我编写了一个简单的程序,该程序利用线程池实现了基于libcurl的异步HTTP请求功能。尽管这个项目还有许多地方可以优化改进,但我依然选择将其公开分享给社区以达到三个目的:首先是为了回馈在上帮助过我的朋友们,并希望它能够为遇到同样问题的人提供一些参考;其次是考虑到许多人可能因为编译libcurl时遇到了困难而望而却步,因此我将项目中包含的libcurl库文件一并提供了出来供有需要的朋友使用;最后是希望能够从社区的大神们那里获得宝贵的建议和指导。 对于想要利用这个程序提供的异步HTTP请求功能的人士,请参考继承HttpBaseRequest类,并重写virtual void OnComplete(CURLcode code)方法以处理响应消息。如果有其他与本项目相关的问题,欢迎提问交流。
  • 使QT进行HTTP GET和POST
    优质
    本教程详细介绍了如何利用Qt框架执行HTTP GET与POST请求,涵盖网络编程基础及代码实现细节。适合初学者快速入门。 QT实现的HTTP GET 和 POST 操作可以通过以下头文件来完成: ```cpp #include #include #include #include #include ``` 这些头文件包含了进行网络请求所需的基本类和数据结构。
  • 使QT进行HTTP GET和POST
    优质
    本教程详细介绍如何运用Qt框架实现HTTP GET与POST网络请求,适用于希望在应用程序中集成网络功能的开发者。 在QT中实现HTTP GET和POST操作可以使用以下头文件: ```cpp #include #include #include #include #include ``` 这些头文件提供了处理网络请求所需的基本类。`QHttp` 类用于发送HTTP 请求,而 `QHttpRequestHeader` 和 `QHttpResponseHeader` 分别用于构建和解析 HTTP 头信息。
  • 使CURL发送HTTP的技巧
    优质
    本文介绍了如何利用CURL命令行工具高效地发送各种类型的HTTP请求,并分享了一些实用的小技巧。适合需要频繁进行接口测试和数据抓取的技术爱好者阅读。 使用CURL发送HTTP请求是一种常见的方法,在命令行环境中执行网络操作非常方便。通过配置不同的参数选项,可以实现GET、POST等多种类型的HTTP协议交互需求。这种方式对于开发人员来说是一个强大的工具,特别是在自动化脚本编写或进行API测试时尤为有用。此外,它还支持多种认证机制和数据传输编码方式(如JSON),能够满足复杂的网络应用场景要求。 重写后的文本没有提及具体的联系方式或者网址链接信息,仅保留了关于CURL使用的基本介绍和技术特性说明。
  • 使Socket发送HTTP的实现
    优质
    本文介绍了如何利用Socket编程技术手动构建和发送HTTP请求的过程,详细解释了TCP连接、HTTP协议封装及数据解析等关键步骤。 最近花了些时间完成了这个项目,哈哈~~使用Socket实现了发送HTTP请求的功能。以下是CHttp类公开的一些函数: - `void SetUrl(char*);` // 设置网页URL - `char* GetCookie();` // 获取网页cookie - `void SetCookie(std::string strCookie);` // 添加cookie - `std::string GetLastHead(){return tmpHead;}` // 获取上一个请求返回的头信息 - `std::string GetLastData(){return tmpData;}` // 获取上一个请求返回的网页内容 - `std::string Get();` // GET方式访问网页 - `std::string Post(const char* chPostData);` // POST方式访问网页 - `std::string GetHead();` // 获取请求头信息 - `void SetHead(std::string strHead){m_strHead=strHead;}` // 设置请求头