sql - 从 SQL 查询调用 SharePoint 2016 REST API
问题描述
目前我正在本地工作站上运行 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', NULL, 'Authentication', @authHeader;
IF @ret <> 0 EXEC sp_OAGetErrorInfo @token
EXEC @ret = sp_OAMethod @token, 'setRequestHeader', NULL, 'Content-type', @contentType;
IF @ret <> 0 EXEC sp_OAGetErrorInfo @token
EXEC @ret = sp_OAMethod @token, 'send'--, NULL, @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.', 10, 1);
解决方案
推荐阅读
- android - TouchableOpacity onPress 在 Android 上不起作用
- max - 最大运费 prestashop 1.7
- phpstorm - Why is yarn not found as a package manager in PhpStorm?
- google-apps-script - appmaker 中的手风琴
- jquery - How to dynamically load partial view Via jquery ajax in Asp.Net MVC
- boolean - How can I use a bool and bool condition in a mustache template?
- amazon-web-services - Multi-Tenant Authentication with AWS Cognito
- javascript - 映射数组项不会呈现所有元素
- json - 邮递员从环境变量在 Json 文件中添加数组
- https - 用于负载平衡 gRPC 流量的 HTTPS 证书