我需要将HttpWebRequest发送到具有基本内联凭据的URL,如下所示:
http://user:password@doamin/query
Run Code Online (Sandbox Code Playgroud)
我已经尝试按原样设置Url,但它似乎没有通过凭证(得到403).
尝试设置HttpWebRequest的Credentials属性:
request.Credentials = new NetworkCredentials("username","pasword")
Run Code Online (Sandbox Code Playgroud)
并从URL中删除它们(导致http://domain/query
)但仍然得到相同的结果(403).
直接从任何浏览器使用Url成功,因此凭据是OK.
我错过了什么?
[UPDATE - ANSWER]
这是适用于我的代码:
string credentials = "username:password";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(formattedUrl);
request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(credentials)));
request.PreAuthenticate = true;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Run Code Online (Sandbox Code Playgroud)
首先,您创建您的 creds 类:
NetworkCredential myCred = new NetworkCredential("username", "password");
Run Code Online (Sandbox Code Playgroud)
将其添加到您的信用缓存中:
CredentialCache credsCache = new CredentialCache();
Run Code Online (Sandbox Code Playgroud)
// NOTE! THE PROTOCOL is needed in Uri (e.g. http://)
credsCache.Add(new Uri("proto://www.foo.com"), "Basic", myCred);
Run Code Online (Sandbox Code Playgroud)
现在您可以执行网络请求:
WebRequest wr = WebRequest.Create("www.foo.com");
Run Code Online (Sandbox Code Playgroud)
然后将 wr.Credentials 设置为 credsCache:
wr.Credentials = credsCache;
Run Code Online (Sandbox Code Playgroud)