Невозможно обработать перенаправление от протоколов HTTP / HTTPS к другим разным - PullRequest
3 голосов
/ 21 мая 2010

По сути, я пытаюсь получить EXE-файл с сайта CNet Download.com

Итак, я создал веб-парсер, и пока все идет хорошо.

Вот пример ссылки, взятой прямо с их сайта:

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 Objects, и, похоже, ни один из них не поддерживает перенаправления.

Этот код не выполняется в 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 ]

2 голосов
/ 21 мая 2010

Вы можете получить значение заголовка «Location» из response.headers, а затем создать новый FtpWebRequest для загрузки этого ресурса.

1 голос
/ 21 мая 2010

в вашем первом фрагменте кода вы будете перенаправлены на ссылку, используя другой протокол (т. Е. Он больше не Http, как в Http WebRequest), поэтому он не может быть получен в результате неправильного ответа http.

Во второй части вы больше не перенаправлены и, следовательно, вы не получаете ответ FTP (который не является неправильным при интерпретации как ответ HTTP).

Вам нужно получить FTP-ссылку, как написал ferozo, вы можете сделать это, получив значение заголовка "location", и использовать FtpWebRequest для доступа к файлу

...