无法处理从HTTP / HTTPS协议到其他不同协议的重定向

时间:2010-05-21 18:47:31

标签: c# .net networking redirect httpwebrequest

基本上,我正试图从CNet的Download.com中获取EXE

所以我创建了Web解析器,到目前为止一切顺利。

以下是从其网站直接提取的示例链接:

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变成空字符串。

我不知所措!任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

您可以从response.headers获取“Location”标头的值,然后创建一个新的FtpWebRequest来下载该资源。

答案 1 :(得分:1)

在您的第一个代码段中,您将被重定向到使用不同协议的链接(即,它不再像 Http WebRequest中的Http那样),因此它会导致错误的http响应失败。

在第二部分中,您不再被重定向,因此您不会收到FTP响应(在解释为HTTP响应时不会出现错误)。

您需要获取FTP链接,因为ferozo写道您可以通过获取标题“location”的值来执行此操作,并使用FtpWebRequest访问该文件

相关问题