Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法处理从HTTP/HTTPS协议到其他不同协议的重定向_C#_.net_Networking_Redirect_Httpwebrequest - Fatal编程技术网

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

C# 无法处理从HTTP/HTTPS协议到其他不同协议的重定向,c#,.net,networking,redirect,httpwebrequest,C#,.net,Networking,Redirect,Httpwebrequest,基本上,我想从CNet的下载网站上获取一个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=

基本上,我想从CNet的下载网站上获取一个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");
req.AllowAutoRedirect = false;
WebResponse response = req.GetResponse();
string s = new StreamReader(response.GetResponseStream()).ReadToEnd();
它不再抛出错误,但是变量s被证明是一个空字符串


我不知所措!有人可以帮忙吗?

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

在您的第一个代码片段中,您将被重定向到使用不同协议的链接(即不再是HttpWebRequest中的Http)因此,它无法响应格式错误的http响应

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


您需要获取FTP链接,正如ferozo所写,您可以通过获取标题“location”的值来实现这一点,并使用FtpWebRequest访问文件

它实际上重定向到另一个重定向,该重定向指向FTP站点。我只是重复了你的过程两次。谢谢,它起作用了。似乎有关系。这对我有帮助
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://dw.com.com/redir");
req.AllowAutoRedirect = false;
WebResponse response = req.GetResponse();
string s = new StreamReader(response.GetResponseStream()).ReadToEnd();