【问题标题】:Set custom request header in SQL querying a REST API which expects session to be passed in header在 SQL 中设置自定义请求标头,查询期望在标头中传递会话的 REST API
【发布时间】:2019-10-18 17:27:37
【问题描述】:

在这里找到了一个很棒的答案:Parse JSON from web in SQL Server 2017

我能够从 HTTP 请求获取响应正文到以 JSON 格式响应的 REST API 服务器。 当 API 端点不需要会话 ID 时,这非常有效。

但是我想查询的端点需要一个会话 ID(我已经测试了一个永久 ID,没有任何身份验证问题)。

在 Wireshark 中分析 HTTP 请求时,我可以看到数据包中没有提及我的标头。但是看看当我通过网络浏览器与 API 交互时,我可以看到我的 Session-Id 正在传递。

这是我的 SQL:

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 服务器。

var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.setRequestHeader("Session-Id", "123456789");

任何/所有帮助将不胜感激!

谢谢

【问题讨论】:

    标签: sql json sql-server api http


    【解决方案1】:

    现在已解决;它不起作用的原因有两个:

    1. 需要从与运行查询的服务器相同的源生成会话 ID(例如,Web 前端生成的会话 ID 链接到生成它的机器 ID、正在运行 SQL 的服务器from 必须是生成会话 ID 的那个)。
    2. 我运行查询的服务器有一个过期的 SSL 证书,需要更新它

    两者都有点小众,但也许这个答案会帮助某人,或者至少排除一些原因,谁知道呢?!

    【讨论】:

      猜你喜欢
      • 2015-09-08
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 2012-11-17
      相关资源
      最近更新 更多