从 SQL Server 向 rest API 发送请求并检查返回的 http 代码

我正在尝试将 json 数据发送到 rest API,最好是从 SQL Server 2016 发送。我遇到了以下使用 sp_OAMethod 的代码(来自https://gist.github.com/theorigin/fa3c58406ff7b4565ca2)并使用 sp_OAMethod 对其进行了测试webhook.site 所以我知道它发送,但我看不到来自 SQL 的 http 响应代码,这是我需要查看的......如果有问题,有问题的 API 会发送 400 响应以及错误消息提交,如果一切正确,则为 200。


SQL 代码在所有情况下都返回一个 NULL 列。目前,我编写了一个 PHP 应用程序,它为我完成了所有这些工作,只是它不是自动化的。该应用程序通过 csv 文件运行,并一次向端点发送一行 json。在我更改它以查看查询结果而不是 csv 文件之前,以及在我开始考虑将其添加到 cron 作业(或者可能是 Windows 中的计划任务?)之前,我一直想知道我想要实现的目标是否可行使用 SQL Server,这是我所有数据的存储位置。不过,这可能是一个圆钉插入一个方孔,如果是这样,那么我会打折这种方法。


DECLARE @Object AS INT;

DECLARE @ResponseText AS VARCHAR(8000);

DECLARE @Body AS VARCHAR(8000) = 

'{

    "name": "John",

    "age": 30,

}'  


EXEC sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;

EXEC sp_OAMethod @Object, 'open', NULL, 'post','https://webhook.site/1234', 'false'


EXEC sp_OAMethod @Object, 'setRequestHeader', null, 'Content-Type', 'application/json'

EXEC sp_OAMethod @Object, 'send', null, @body


EXEC sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT

SELECT @ResponseText


EXEC sp_OADestroy @Object

理想情况下,我会看到“200”或“400”作为每个请求的响应,并且我可以在存储过程运行后解析它们。


非常欢迎任何帮助或建议。谢谢


炎炎设计
浏览 344回答 2
2回答

冉冉说

我在想原因是因为你做了SELECT @ResponseText然后你对SELECT返回的任何东西都不做任何事情,最后你破坏了对象。尝试将您在 @ResponseText 中保存的响应分配给另一个变量。在下面的示例中,我正在登录一个 rest API,然后将响应分配给另一个变量:EXEC sp_OACREATE 'MSXML2.ServerXMLHttp', @Object OUT;EXEC sp_OAMethod @Object, 'Open', NULL, 'POST', 'https://url.net/api/LoginUser', 'false'EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Content-Type', 'application/json'DECLARE @len intSET @len = len(@body)EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Ocp-Apim-Subscription-Key','4f82f9d067914287979884f920d86ffb'EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Ocp-Apim-Trace:true'EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Content-Length', @lenEXEC sp_OAMethod @Object, 'SETRequestBody', null, 'Body', @bodyEXEC sp_OAMethod @Object, 'Send', null, @bodyEXEC sp_OAMethod @Object, 'ResponseText', @ResponseText OUTPUTSELECT @Token=@ResponseTextEXEC sp_OADestroy @ObjectSET @Token='Bearer '+ REPLACE(@Token, '"', '')PRINT @Token

梦里花落0921

尝试在临时表中使用 SELECT 来评估结果。DECLARE @tableResponseText TABLE (    [ResponseText] VARCHAR(MAX)    )您的设置/发送语句收集响应数据EXEC @RC = sp_OAGetProperty @Object, 'status', @HttpResponseCode OUTINSERT INTO @tableResponseText ([ResponseText]) EXEC sp_OAGetProperty @Object, 'responseText'
打开App,查看更多内容
随时随地看视频慕课网APP