为http:// user:password @ doamin/query Url创建一个HttpWebRequest

ste*_*rnr 7 c# httpwebrequest

我需要将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)

Ahm*_*sud 2

首先,您创建您的 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)