2011-09-01 85 views
0

基本上我一直在試圖做的是從服務器上下載一個文件。服務器發送自動重定向這是很好的,但通過分組嗅探一個程序,它成功地下載該文件我發現,在集管(用於第二請求)爲:C#發送一個沒有servername的HttpWebRequest

GET /path/to/file.txt 
... 
Host: server.com 

而不是當前響應是生成的(我認爲是標準):

GET www.server.com/path/to/file.txt 

在500服務器錯誤使用正常的HttpWebRequest方法的結果,我在嘗試正如人們所期望只使用相對路徑時拋出的異常。 使用AllowAutoRedirect不適用於這種情況,因爲Cookie處理不當,但即使我手動處理,也會發生相同的錯誤。

如何做到這一點(最好沒有套接字:D)?

+1

「標準」 GET在後看起來壞了,我相信。 [HTTP 1.1 *需要*主機頭](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23) - 在這種情況下,URI可能也是服務器相對的。如果需要更多的控制,302/303/307可以隨時手動處理。 – 2011-09-01 05:33:21

+0

您使用什麼軟件包來獲取文件? HttpClient可以通過NuGet使用,比System.Net類更容易使用 – Jason

+0

感謝@ pst,你說得對(我以爲是)標準請求是不正確的。由HttpWebRequest生成的請求正在發送主機,但仍然像上面那樣放入GET行,有沒有辦法刪除它?這是我看到的與我的請求和正在工作的唯一不同之處。我正在手動處理300個請求,我正在處理的請求會發回一個位置標題,並且我正在嘗試將此用於我的下一個請求(僅僅是因爲2個Cookie是從服務器發送的,而我的CookieContainer似乎只是存儲一個當我使用AllowAutoRedirect) – James

回答

0

說實話,我真的不知道你在問什麼,但你提到了cookie的麻煩。作爲黑暗猜測中的一個鏡頭,你是否在WebRequest上設置CookieContainer?

request.CookieContainer = new CookieContainer(); 
request.AllowAutoRedirect = true; 
+0

我給了這個鏡頭,但我發現它只攜帶我想要的一個餅乾。我禁用了自動重定向功能,因此我可以手動獲取cookie併發出另一個請求,但看起來我的請求第二次無效。基本上我需要知道的是如何讓我的請求看起來像我展示的第一個示例,而不是第二個示例! – James

相關問題