我正在尝试使用SQL Server 2016从API获取JSON数据。我能够在API不需要用户凭据的情况下获取数据,但是如果我需要提供用户名和密码,则无法获取数据
DECLARE @authHeader VARCHAR(8000);
DECLARE @contentType VARCHAR(8000);
DECLARE @postData VARCHAR(8000);
DECLARE @responseText VARCHAR(8000);
DECLARE @responseXML VARCHAR(8000);
DECLARE @ret INT;
DECLARE @status VARCHAR(8000);
DECLARE @statusText VARCHAR(8000);
DECLARE @token INT;
DECLARE @url VARCHAR(8000);
DECLARE @JSON VARCHAR(8000);
SET @authHeader = 'BASIC QWERTYASDFGH1234567890123456789==';
SET @contentType = 'application/json';
SET @url = 'https://example.example.com/api/product-list?area=12345&fromMonth=201811&toMonth=201812'
-- Open the connection.
EXEC @ret = sp_OACreate 'MSXML2.ServerXMLHTTP', @token OUT;
IF @ret <> 0 RAISERROR('Unable to open HTTP connection.', 10, 1);
-- Send the request.
EXEC @ret = sp_OAMethod @token, 'Open', null, 'GET', @Url, 'false'
EXEC @ret = sp_OAMethod @token, 'setRequestHeader', NULL, 'Authorization', @authHeader;
EXEC @ret = sp_OAMethod @token, 'setRequestHeader', NULL, 'Content-type', @contentType;
EXEC sp_OAMethod @token, 'send', null
EXEC sp_OAMethod @token, 'responseText', @ResponseText OUTPUT
SET @JSON = @ResponseText
SELECT @JSON
有人知道如何从SQL Server正确传递Authorization标头吗?
答案 0 :(得分:1)
以下用于承载身份验证的脚本。
SET @authHeader = 'Bearer keHDkAlaWwlczbqmGuGnqqYm-d3GfAvu_IuaX2l93';
EXEC @ret = sp_OAMethod @token, 'setRequestHeader', NULL, 'Authorization', @authHeader;
在这种情况下,如果您想将请求正文传递给 API,请添加以下行
DECLARE @RequestBody VARCHAR(8000)='[{"requestId": 1,"sender":"Myself"}]'
EXEC @ret = sp_OAMethod @token, 'send', NULL, @RequestBody;
答案 1 :(得分:0)
您是否与邮递员检查了相同的请求?具有完全相同的标题吗?
通常,Authorization标头必须以关键字“ Bearer”为前缀。
"Authorization": "Bearer yourTokenHere"
您可以尝试使用此前缀吗?