适用post put 请求
最背景:近单位用elasticsearch升级从2.4X升级到5.X,增加了auth的权限验证。使用的PlainElastic.Net组件,该组件源码支持权限有问题,下载了源码更改了下。
本质是把用户名和密码放到了head里。
authString =“用户名:密码@127.0.0.1”;
string authUrl = url.Replace("http://","");
string authString = authUrl.Substring(0, authUrl.LastIndexOf("@"));
if (!string.IsNullOrWhiteSpace(authString))
{
var array = authString.Split(':');
string userName = array[0];
string password = array[1];
string encoded = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes($"{userName}:{password}"));
request.Headers.Add("Authorization", $"Basic {encoded}");
}
或者
WebRequest request = WebRequest.Create(url);
request.Credentials = GetCredential();
request.PreAuthenticate = true;
private CredentialCache GetCredential(string url)
{
string authUrl = url.Replace("http://","");
string authString = authUrl.Substring(0, authUrl.LastIndexOf("@"));
string userName = array[0];
string password = array[1];
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
CredentialCache credentialCache = new CredentialCache();
credentialCache.Add(new System.Uri(url), "Basic", new NetworkCredential(userName, password ));
return credentialCache;
}
参考:https://stackoverflow.com/questions/4334521/httpwebrequest-using-basic-authentication