问题描述
目前我在本地工作站上运行 SQL Server 2017。我想从 SQL 存储过程调用 (GET) 到我们网络上的 SharePoint 2016 REST API。
在浏览器中使用 REST API url 或使用 PostMan(NTLM 身份验证)时,我成功获得了结果。
尝试从 SQL 调用相同的 API 时,我不断遇到 401 Unauthorized
错误。身份验证标头包含与 PostMan 中使用的相同的帐户详细信息。
下面的 SQL 查询返回:
Status: 401 (Unauthorized)
Response text: 401 UNAUTHORIZED
如何修复下面的 SQL 查询以解决此问题?
DECLARE @contentType NVARCHAR(64);
DECLARE @responseText NVARCHAR(2000);
DECLARE @responseXML NVARCHAR(2000);
DECLARE @ret INT;
DECLARE @status NVARCHAR(32);
DECLARE @statusText NVARCHAR(32);
DECLARE @token INT;
DECLARE @url NVARCHAR(256);
DECLARE @authHeader VARCHAR(8000);
SET @authHeader = 'BASIC ' +(SELECT CAST('<account>:<password>' as varbinary(max)) FOR XML PATH(''),BINARY BASE64)
--SET @contentType = 'application/x-www-form-urlencoded';
SET @contentType = 'application/atom+xml';
SET @url = 'http://<FQDN>/sites/<site>/_api/web/lists/getbytitle(''Documents'')/items';
-- Open the connection.
EXEC @ret = sp_OACreate 'MSXML2.ServerXMLHTTP',@token OUT;
IF @ret <> 0 RAISERROR('Unable to open HTTP(S) connection.',10,1);
-- Send the request.
EXEC @ret = sp_OAMethod @token,'open',NULL,'POST',@url,'false';
IF @ret <> 0 EXEC sp_OAGetErrorInfo @token
EXEC @ret = sp_OAMethod @token,'setRequestHeader','Authentication',@authHeader;
IF @ret <> 0 EXEC sp_OAGetErrorInfo @token
EXEC @ret = sp_OAMethod @token,'Content-type',@contentType;
IF @ret <> 0 EXEC sp_OAGetErrorInfo @token
EXEC @ret = sp_OAMethod @token,'send'--,@postData;
IF @ret <> 0 EXEC sp_OAGetErrorInfo @token
-- Handle the response.
EXEC @ret = sp_OAGetProperty @token,'status',@status OUT;
EXEC @ret = sp_OAGetProperty @token,'statusText',@statusText OUT;
EXEC @ret = sp_OAGetProperty @token,'responseText',@responseText OUT;
-- Show the response.
PRINT 'Status: ' + @status + ' (' + @statusText + ')';
PRINT 'Response text: ' + @responseText;
-- Close the connection.
EXEC @ret = sp_OADestroy @token;
IF @ret <> 0 RAISERROR('Unable to close HTTP connection.',1);
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)