Sql 如何在SSMS中使用基本身份验证传递用户名和密码发送http请求?

Sql 如何在SSMS中使用基本身份验证传递用户名和密码发送http请求?,sql,sql-server,api,tsql,http,Sql,Sql Server,Api,Tsql,Http,因此,我今天使用的API在http请求时返回XML文件。今天我在这个过程中并没有任何身份验证,但API网站将提供更多的安全性。因此,我需要传递用户名和密码,而不是“No Auth” 这是我今天使用的代码 DECLARE @authHeader VARCHAR(64); DECLARE @contentType VARCHAR(64); DECLARE @responseText varchar(4000); DECLARE @ret INT; DECLARE @status VARCHAR(32

因此,我今天使用的API在http请求时返回XML文件。今天我在这个过程中并没有任何身份验证,但API网站将提供更多的安全性。因此,我需要传递用户名和密码,而不是“No Auth”

这是我今天使用的代码

DECLARE @authHeader VARCHAR(64);
DECLARE @contentType VARCHAR(64);
DECLARE @responseText varchar(4000);
DECLARE @ret INT;
DECLARE @status VARCHAR(32);
DECLARE @statusText VARCHAR(32);
DECLARE @token INT;
DECLARE @url varchar(8000);
--DECLARE @username varchar(255);  will use in the future
--DECLARE @password varchar(255);  will use in the future


SET @authHeader  = 'No Auth'
SET @contentType = 'application/xml';
SET @url = 'https://www.someurl.com/get_xml';

-- 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 @ret = sp_OAMethod @token, 'send'

-- 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);
DECLARE@authHeader VARCHAR(64);
声明@contentType VARCHAR(64);
声明@responseText-varchar(4000);
声明@retint;
声明@status VARCHAR(32);
声明@statusText-VARCHAR(32);
声明@tokenint;
声明@url varchar(8000);
--声明@username varchar(255);将在将来使用
--声明@password varchar(255);将在将来使用
SET@authHeader='No Auth'
SET@contentType='application/xml';
设置@url=https://www.someurl.com/get_xml';
--打开连接。
EXEC@ret=sp_OACreate'MSXML2.ServerXMLHTTP',@token OUT;
如果@ret 0出现错误('无法打开HTTP连接',10,1);
--发送请求。
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@ret=sp_OAMethod@token'send'
--处理响应。
EXEC@ret=sp_OAGetProperty@token,'status',@status OUT;
EXEC@ret=sp_OAGetProperty@token,'statusText',@statusText OUT;
EXEC@ret=sp_OAGetProperty@token,'responseText',@responseText-OUT;
--显示响应。
打印“状态:'+@Status++'('+@statusText++');
打印“响应文本:”+@responseText;
--关闭连接。
EXEC@ret=sp_OADestroy@token;
如果@ret 0出现错误('无法关闭HTTP连接',10,1);
如何传递相同的http
get
请求,但使用基本身份验证,传递
Username:Login
Password:Admin

我试着在网上搜索,但找不到这方面的很多信息

不要传递密码。你应该对密码进行加密和散列。传递和存储纯文本密码是一个巨大的安全风险。我的IP地址将被列入白名单,密码将被散列,因此它不是一个简单的自定义“qwerty”密码。您可以使用SQL CLR而不是不推荐的sp_OA吗。。。。扩展存储过程?你会发现很多关于如何在C#中进行HTTP基本身份验证的示例。我正在做这方面的研究,我发现我现在测试的C#脚本很少,但CLR方法每个请求需要20-30秒,这对于我的需求来说非常慢。所以我要坚持用sp_OA。。但是如果没有选择,我将使用CLR,为什么您首先要从数据库中执行此操作?当另一个便宜得多的系统上的脚本可以以一种不太复杂的方式执行此操作时,为什么还要花费SQL Server资源(非常昂贵)?不要传递密码。你应该对密码进行加密和散列。传递和存储纯文本密码是一个巨大的安全风险。我的IP地址将被列入白名单,密码将被散列,因此它不是一个简单的自定义“qwerty”密码。您可以使用SQL CLR而不是不推荐的sp_OA吗。。。。扩展存储过程?你会发现很多关于如何在C#中进行HTTP基本身份验证的示例。我正在做这方面的研究,我发现我现在测试的C#脚本很少,但CLR方法每个请求需要20-30秒,这对于我的需求来说非常慢。所以我要坚持用sp_OA。。但是如果没有选择,我将使用CLR,为什么您首先要从数据库中执行此操作?当另一个便宜得多的系统上的脚本可以以不太复杂的方式完成这项工作时,为什么还要花费SQL Server资源(非常昂贵)?