2011-09-08 93 views
1

它似乎只發生一臺機器而沒有其他機器發生。HttpWebRequest類型「GET」返回錯誤400

HttpWebRequest myRequest =(HttpWebRequest)WebRequest.Create("https://connect.zystemsgo.com/auto/"); 
     myRequest.Method = "GET"; 
     SetCertificatePolicy(); 
     Application.DoEvents(); 
     WebResponse myResponse = myRequest.GetResponse(); 
     StreamReader sr = new StreamReader(myResponse.GetResponseStream(),System.Text.Encoding.UTF8); 
     string result = sr.ReadToEnd(); 

我試圖尋找其他400請求錯誤,但目前尚不清楚。我如何去調試呢?

+0

你是否正確地處理了所有的東西(顯示的代碼將不會)?你嘗試了多少個同時連接? –

回答

2

HTTP Error 400表示錯誤的請求。這是由服務器返回的。

通常,當我調試HTTP請求時,我使用Fiddler來監視請求和響應並找出發生了什麼。它永遠不會失敗。

0

這是一個錯誤的請求錯誤。請問有沒有參數? 你可以發佈響應消息,它會給出一些錯誤的想法。

+0

我只是試圖從網站下載文件。這是一個引導程序,用於檢查文件的最新版本。請求中通常有什麼類型的參數? – roymustang86

+0

如果您不介意,您可以就如何形成請求字符串提供建議嗎? – roymustang86

+0

當我運行你的代碼減去SetCertificatePolicy()時,我得到了一些html輸出。 Application.DoEvents();方法 。該html有兩個鏈接。是否預期輸出?其中一個鏈接指向一個目錄,你想導航到該目錄嗎?我無法重現400錯誤。 –

1

(不是一個真正的答案,但太大評論)

對於它的價值,我跑了下面的Python代碼(懶得旋轉起來C#:),它工作得很好:

import httplib 
conn = httplib.HTTPSConnection('connect.zystemsgo.com') 
conn.request('GET', '/auto/') 
resp = conn.getresponse() 
data = resp.read() 
print data   # expected ouput, just like visiting in a browser 
print resp.status # 200 

您確定您向我們顯示實際上失敗的URL,或者您的代碼是一個更一般的示例嗎?

服務器證書可能沒有安裝在該機器上?我不希望在這種情況下使用HTTP 400,但它是我迄今爲止唯一能想到的...

0

我在上面的註釋中提供的代碼有效。 WebClient webClient = new WebClient(); webClient.DownloadFile(「您的文件的完整url」,@「c:\ myfile.txt」);

您需要具有在您選擇的目錄中寫入的權限。

如果你願意,你也可以嘗試使用異步下載。我不明白爲什麼它不能在某臺機器上工作。

+0

標記爲答案,如果它可以幫助你解決你的問題。 –