2010-05-21 187 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访问文件