2010-05-21 195 views
3

基本上,我試圖抓住從CNET的Download.com無法處理從HTTP/HTTPS協議重定向到其他不同的人

所以我創造了網絡分析器,到目前爲止,一切進展順利的EXE。

下面是一個簡單的鏈接直接從他們的網站拉:

http://dw.com.com/redir?edId=3&siteId=4&oId=3001-20_4-10308491&ontId=20_4&spi=e6323e8d83a8b4374d43d519f1bd6757&lop=txt&tag=idl2&pid=10566981&mfgId=6250549&merId=6250549&pguid=PlvcGQoPjAEAAH5rQL0AAABv&destUrl=ftp%3A%2F%2F202.190.201.108%2Fpub%2Fryl2%2Fclient%2Finstaller-ryl2_v1673.exe 

這裏的問題是:當你嘗試下載,它開始與HTTP,然後重定向到FTP站點。我已經嘗試過.NET的WebClient和HttpWebRequest對象,看起來它們都不支持重定向。

此代碼在GetResponse()失敗;現在

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://dw.com.com/redir"); 
WebResponse response = req.GetResponse(); 

,我也試過這樣:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://dw.com.com/redir"); 
req.AllowAutoRedirect = false; 
WebResponse response = req.GetResponse(); 
string s = new StreamReader(response.GetResponseStream()).ReadToEnd(); 

而且它不會拋出錯誤了,但是變量s原來是一個空字符串。

我不知所措!任何人都可以幫忙嗎?

+0

似乎有關。這幫助我http://stackoverflow.com/a/6311925/511438 – 2014-09-15 23:11:15

回答

2

您可以從response.headers獲取「Location」頭的值,然後創建一個新的FtpWebRequest來下載該資源。

+0

我會盡力,謝謝 – Peanut 2010-05-21 19:09:40

+0

它實際上重定向到另一個重定向到FTP站點。 我只是重複你的過程2次。謝謝,它工作。 – Peanut 2010-05-21 19:44:50

0

在你的第一個代碼段,你會被重定向到使用不同協議的鏈接(即它不再HTTP作爲在的Http WebRequest的),所以它不能杜以畸形的HTTP響應。

在第二部分中,您不再被重定向,因此您沒有收到FTP響應(當被解釋爲HTTP響應時,它不是malform)。

您需要獲得FTP鏈接,ferozo寫道:您可以通過獲取標題「位置」的值做到這一點,並使用的FtpWebRequest訪問文件