2011-12-27 32 views
7

我需要發送的HttpWebRequest到URL基本內嵌憑據,如下所示:爲HTTP創建的HttpWebRequest://用戶名:密碼@ doamin /查詢網址

http://user:[email protected]/query 

我已經嘗試設置URL原樣,但它似乎沒有通過憑據(得到403)。
嘗試設置的HttpWebRequest的憑據屬性:

request.Credentials = new NetworkCredentials("username","pasword") 

並從URL刪除它們(導致http://domain/query),但仍得到了同樣的結果(403)。

直接從任何瀏覽器使用Url成功,所以證書是好的。

我錯過了什麼?

[更新 - 答案】
這裏是爲我工作的代碼:

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(); 

回答

1

首先創建您creds類:

NetworkCredential myCred = new NetworkCredential("username", "password"); 

其添加到您Creds緩存:

CredentialCache credsCache = new CredentialCache(); 

credsCache.Add(new Uri("www.foo.com"), "Basic", myCred); 

WebRequest wr = WebRequest.Create("www.foo.com"); 
wr.Credentials = credsCache; 

然後設置t他wr.Credentials to the credsCache

+0

嘗試了你建議的代碼,但沒有奏效。使用Fiddler查看請求我沒有看到credentails發送... – sternr 2011-12-27 11:06:42

+0

有趣的是,我創建的Uri使用以下結構:「http://www.domain.com」,嘗試創建沒有http://的Uri前綴失敗 – sternr 2011-12-27 11:10:42

0

純文本密碼不再是URL的有效部分(根據各自的RFC)。您應該已經嘗試過使用NetworkCredentials。見MSDN for code snippet/sample

NetworkCredential myCred = new NetworkCredential(
    SecurelyStoredUserName,SecurelyStoredPassword,SecurelyStoredDomain); 

CredentialCache myCache = new CredentialCache(); 

myCache.Add(new Uri("http://www.contoso.com"), "Basic", myCred); 
myCache.Add(new Uri("http://app.contoso.com"), "Basic", myCred); 

WebRequest wr = WebRequest.Create("http://www.contoso.com"); 
wr.Credentials = myCache; 

UPD。與MSDN代碼片段相比,需要使用「http://」前綴字符串來避免「無效的URI」異常。

+0

這會拋出一個不良URI異常。 – 2013-05-08 07:43:04

+1

在更新的答案中添加'「http://'。 – 2013-05-08 07:47:46