json - SQL Server sp_OAMethod 在调用 WebAPI 时返回 NULL
问题描述
我们正在尝试检索由私有第三方 WebAPI 提供的一些 JSON 结果。出于某种原因,其中一个调用每次都返回 NULL。如果我们使用不同的 URI 调用来访问不同的信息,它就可以工作。但是,这个尤其行不通。
Declare @Object as Int;
Declare @ResponseText as Varchar(8000);
Declare @URI varchar(max) = 'https://thethridpartysite.com/api/1234/listorders/'
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'get', @URI, 'false'
Exec sp_OAMethod @Object, 'setRequestHeader', NULL, 'Content-Type', 'application/json; charset=utf-8'
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
SELECT @ResponseText;
在上面,如果我将“listorders”更改为“listproducts”,它将起作用。
我认为这可能是因为“listorders”返回超过 8000 个字符,但是当我更改 @ResponseText 变量“varchar(max)”时,我仍然得到 NULL
解决方案
在尝试了很多事情之后,我无法弄清楚为什么 OLE 自动化方法返回 NULL 值。因此,我最终使用 SQL CLR 构建了所有内容,并且成功了。
我有效地使用了以下链接中讨论的步骤(我自己的想法):
https://blogs.msdn.microsoft.com/sqllive/2008/06/18/accessing-rest-based-web-services-using-sql-clr/
我遇到了一些学习上的痛苦和一些问题,但我能够解决它们。祝那些关注并感谢那些回复我的 OP 的人好运。
推荐阅读
- mongodb - MongoDB groupby - 在字段中提取逗号分隔值
- python - Python 中的关键错误,使用 Pycharm 和 Pandas
- react-native - 前端基于OAUTH2获取社交登录中的访问令牌不是很危险吗?
- javascript - 无法使用 fetch 解决承诺
- laravel - 如何从 laravel-8 的另一个表中的表中调用 id
- java - 如何在单独的线程中执行 HTTP 请求并返回响应
- java - 如何将自定义 Http 客户端注入 Spring Cloud openfeign?
- c# - 具有自定义图像和文本在运行时更改的 RadioButton
- r - 如何绘制多个时间点之间的 Pearson 相关性?
- javascript - 当我在 puppeteer 中使用代理标志时,waitForSelector 返回 TimeoutError