gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:44:45 26 4
gpt4 key购买 nike

我想从 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com