我正在使用T-SQL调用从API获取数据。
让我首先说:这并不理想。
代码库不能更改,我留在数据库端,在我们的内部网络上“使其工作”(不面向公众)。
我可以使用下面的脚本从API得到“登录成功”的回复。
问题是,此API不使用令牌进行身份验证。因此,我无法在第二个查询中将令牌作为头返回。
DECLARE @AUTH_URL NVARCHAR(MAX) = '_api_url_login_';
Declare @Object as Int;
Declare @Status as Int;
Declare @ResponseText as Varchar(8000);
Exec sp_OACreate 'MSXML2.ServerXMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'post', @AUTH_URL, 'false'
Exec sp_OAMethod @Object, 'setRequestHeader', NULL, 'Content-Type', 'application/x-www-form-urlencoded'
Exec sp_OAMethod @Object, 'send', NULL, '{"username":"___", "password":"___"}'
Exec sp_OAGetProperty @Object, 'status', @Status OUT
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
登录网站并直接从Chrome和Postman调用API可以工作,但不能从SQL Server工作。我认为这是因为SQL Server不维护HTTP会话状态。
GET请求代码如下,我收到了来自API的一般错误(无法发布错误)。
以下是我的GET请求代码:
DECLARE @JOB_URL NVARCHAR(MAX) = '_api_url_';
Declare @Object2 as Int;
Declare @Status2 as Int;
Declare @ResponseText2 as Varchar(8000);
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object2 OUT;
Exec sp_OAMethod @Object2, 'open', NULL, 'get', @JOB_URL, 'False'
Exec sp_OAMethod @Object2, 'send'
Exec sp_OAGetProperty @Object2, 'status', @Status2 OUT
Exec sp_OAMethod @Object2, 'responseText', @ResponseText2 OUTPUT
select @ResponseText2
select @Status2
使用T-SQL在单个HTTP会话中发送这两个查询有什么帮助吗?