2013-10-14 136 views
0

我試圖從我的各種遠程變送器網絡刮日期。我有一個品牌發射的,我可以登錄到與下面的C#代碼:網站登錄數據刮

public static string getSourceCode(string url, string user, string pass) 
{ 
    SecureString pw = new SecureString(); 
    foreach (char c in pass.ToCharArray()) pw.AppendChar(c); 
    NetworkCredential credential = new NetworkCredential(user, pw, url); 
    CredentialCache cache = new CredentialCache(); 
    cache.Add(new Uri(url), "Basic", credential); 
    Uri realLink = new Uri(url); 
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(realLink); 
    req.Credentials = CredentialCache.DefaultNetworkCredentials; 

    HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 

    StreamReader sr = new StreamReader(resp.GetResponseStream()); 
    string sourceCode = sr.ReadToEnd(); 
    sr.Close(); 
    resp.Close(); 
    return sourceCode; 
} 

第二品牌變送器(我不願把網址在公衆場合),而不是返回網頁請求的用戶名密碼將返回一個請求用戶名和密碼的框。使用上面的代碼只會返回未經授權的錯誤。

提琴手說,下面的是,當我成功地登錄到該網站發送:

 
GET http(colon slash slash)lasvegas3abn(*)dyndns(*)tv(PORT)125(slash)measurements(*)htm HTTP/1.1 
Accept: text/html, application/xhtml+xml, */* 
Accept-Language: en-US 
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch) 
Accept-Encoding: gzip, deflate 
Host: lasvegas3abn.dyndns.tv:125 
Authorization: Basic dXNlcjpsaW5lYXI= 
Connection: Keep-Alive 
DNT: 1 

有什麼建議?

+1

您還應該能夠捕捉到當您運行C#代碼並比較它們時Fiddler發送的內容。還要注意,發佈即使編碼的基本認證憑證也是不明智的,因爲它只有base-64編碼並且很容易閱讀。 – mellamokb

+2

您在提琴手跟蹤中發佈的信息顯示了第二個發射器的網址以及您的用戶名和密碼(以64爲基礎編碼)。我建議您更改發射器上的密碼。 – adrianbanks

回答

2

相反的:

req.Credentials = CredentialCache.DefaultNetworkCredentials; 

您可以指定使用特定的用戶名和密碼的憑據:

req.Credentials = new NetworkCredential("username", "password"); 

這應該使您可以通過登錄提示符下,得到(假設您指定正確的用戶名和密碼)。