sql-server - 如何从 SQL 服务器发出 HTTP 请求?

标签 sql-server tomcat

我想从 SQL 服务器向 Tomcat 服务器发送一个 HTTP 请求。我在 Tomcat 服务器中安装了 SQL Server 2012 Express 和非 .NET 应用程序。我经历过这样的 Make a HTTP request from SQL server

如上文所述,“必须在服务器上安装 COM 对象 WinHttp.WinHttpRequest.5.1,一些典型的变体是 WinHttp.WinHttpRequest.5”。 我已经从 winhttp download link 下载了 winhttp.zip , 在 zip 文件夹中找到 winhttp.dll 并将其粘贴到 C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2\MSSQL\Binn 中,如 msdn link .

按照同样的建议,我在 SSMS 中执行了以下行:

sp_addextendedproc 'GetHttp',
 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2\MSSQL\Binn\winhttp.dll';

我还在 SSMS 中执行了以下代码,如“从 SQL 服务器链接发出 HTTP 请求”中所述:

Alter function GetHttp
(
@url varchar(8000)      
)
returns varchar(8000)
as
BEGIN
DECLARE @win int 
DECLARE @hr  int 
DECLARE @text varchar(8000)

EXEC @hr=sp_OACreate 'WinHttp.WinHttpRequest.5.1',@win OUT 
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr=sp_OAMethod @win, 'Open',NULL,'GET',@url,'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr=sp_OAMethod @win,'Send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr=sp_OAGetProperty @win,'ResponseText',@text OUTPUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

EXEC @hr=sp_OADestroy @win 
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 

RETURN @text
END

然后我得到错误

Msg 2010, Level 16, State 1, Procedure GetHttp, Line 2
Cannot perform alter on 'GetHttp' because it is an incompatible object type.

我不知道如何调用函数来发送 HTTP 请求。我假设它是这样的 GetHttp('http://www.google.co.in/')

我错过了什么?

最佳答案

我也得到了另一个答案。我创建了如下程序

CREATE procedure HTTP_Request( @sUrl varchar(200))
As


Declare
@obj int
,@hr int
,@msg varchar(255)


 exec @hr = sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT
if @hr <> 0 begin Raiserror('sp_OACreate MSXML2.ServerXMLHttp.3.0
failed', 16,1) return end


exec @hr = sp_OAMethod @obj, 'open', NULL, 'POST', @sUrl, false
if @hr <>0 begin set @msg = 'sp_OAMethod Open failed' goto eh end


exec @hr = sp_OAMethod @obj, 'setRequestHeader', NULL, 'Content-Type',
'application/x-www-form-urlencoded'
if @hr <>0 begin set @msg = 'sp_OAMethod setRequestHeader failed' goto
eh end


exec @hr = sp_OAMethod @obj, send, NULL, ''
if @hr <>0 begin set @msg = 'sp_OAMethod Send failed' goto eh end

 exec @hr = sp_OADestroy @obj
return
eh:
exec @hr = sp_OADestroy @obj
Raiserror(@msg, 16, 1)
return
GO

我用url调用了存储过程

USE [master]
GO

 DECLARE    @return_value int

EXEC    @return_value = [dbo].[HTTP_Request]
    @sUrl = N'url'

SELECT  'Return Value' = @return_value

GO

谢谢你们让我做这个。

关于sql-server - 如何从 SQL 服务器发出 HTTP 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17407338/

相关文章:

SQL Server 2000 : how do I return only the number from a phone number column

sql-server - 了解 SQL Server 加密(通过密码)?

c# - 存储过程参数名称是否必须与从 C# 传递的参数匹配?

php - 如何在两个不同的 Web 服务器(例如 xampp 和 tomcat)之间使用 session 值。

java - 使用 Servlet 上下文让两个 servlet 使用同一个对象

c# - 在连接字符串中处理反斜杠

sql-server - 获取大于零的最小值

java - 带有 mod_jk 的 Apache/Tomcat 中的多个子域

java - tomcat如何保存临时文件?

tomcat - javax.net.ssl.SSLException : Received fatal alert: unexpected_message using jersey 1 client 异常