在查询REST API的SQL中设置自定义请求标头,该API期望会话在标头中传递
下面是一个奇妙的答案: 我能够从HTTP请求中获取响应主体,并将其发送到RESTAPI服务器,该服务器以JSON格式响应。 当API端点不需要会话ID时,这种方法非常有效 但是,我想查询的端点需要会话ID(我已经测试了一个永久ID,没有任何身份验证问题) 在分析Wireshark中的HTTP请求时,我可以看到数据包中没有提到我的头。但是当我通过web浏览器与API交互时,我可以看到我的会话Id被传递 以下是我的SQL:在查询REST API的SQL中设置自定义请求标头,该API期望会话在标头中传递,sql,json,sql-server,api,http,Sql,Json,Sql Server,Api,Http,下面是一个奇妙的答案: 我能够从HTTP请求中获取响应主体,并将其发送到RESTAPI服务器,该服务器以JSON格式响应。 当API端点不需要会话ID时,这种方法非常有效 但是,我想查询的端点需要会话ID(我已经测试了一个永久ID,没有任何身份验证问题) 在分析Wireshark中的HTTP请求时,我可以看到数据包中没有提到我的头。但是当我通过web浏览器与API交互时,我可以看到我的会话Id被传递 以下是我的SQL: Declare @Object as Int; Declare @Respo
Declare @Object as Int;
Declare @Response table (txt nvarchar(max));
Exec sp_OACreate 'MSXML2.serverXMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'GET',
'http://someip/Rest/EndPoint'
Exec sp_OAMethod @Object, 'setRequestHeader',null,'Session-Id','123456789'
Exec sp_OAMethod @Object, 'send'
Insert Into @Response (txt)
Exec sp_OAMethod @Object, 'responseText'
Exec sp_OADestroy @Object
Select txt From @Response
我可以在Javascipt(见下文)中轻松实现这一点;但是,在SQL中需要它来将响应解析到SQL表中,而无需使用像NodeJS这样的中间人并将响应发送到SQL server
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.setRequestHeader("Session-Id", "123456789");
任何/所有帮助都将不胜感激
谢谢现在问题已经解决了;它不起作用的原因有两个: