2015-10-07 4 views
0

У меня проблема с классом HttpWebRequest.
Я пытаюсь получить исходный код сайта:
http://www.filmweb.pl/film/Igrzyska+%C5%9Bmierci%3A+Kosog%C5%82os.+Cz%C4%99%C5%9B%C4%87+1-2014-626983
, но я всегда получаю сообщение об ошибке:
C# .NET - HttpWebRequest - System.Net.WebException - Слишком много автоматических перенаправлений были предприняты

System.Net.WebException occurred 
    HResult=-2146233079 
    Message=Too many automatic redirections were attempted. 
    Source=System 
    StackTrace: 
     at System.Net.HttpWebRequest.GetResponse() 
     at ProjectName.ClassName.MethodName(String urlAddress) 
    InnerException: 

То есть мой код:

Uri uri = new Uri(@"http://www.filmweb.pl/film/Igrzyska+%C5%9Bmierci%3A+Kosog%C5%82os.+Cz%C4%99%C5%9B%C4%87+1-2014-626983"); 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

Я использовал Скрипач Веб-отладчик, чтобы сравнить запрос Firefox с моим запросом C# .NET, но до сих пор нет ответа.

Firefox:

GET http://www.filmweb.pl/film/Igrzyska+%C5%9Bmierci%3A+Kosog%C5%82os.+Cz%C4%99%C5%9B%C4%87+1-2014-626983 HTTP/1.1 
Host: www.filmweb.pl 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:43.0) Gecko/20100101 Firefox/43.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Connection: keep-alive 


HTTP/1.1 200 OK 
Cache-Control: private, no-cache, no-store, max-age=0, must-revalidate, proxy-revalidate 
Content-Type: text/html;charset=UTF-8 
Content-Language: pl-PL 
Transfer-Encoding: chunked 
Date: Wed, 07 Oct 2015 13:36:31 GMT 
X-Cache: HIT from blade110.non.3dart.com 
X-Cache-Hits: 116 
Server: Apache 

C# .NET:

GET http://www.filmweb.pl/film/Igrzyska+%C5%9Bmierci:+Kosog%C5%82os.+Cz%C4%99%C5%9B%C4%87+1-2014-626983 HTTP/1.1 
Host: www.filmweb.pl 
Connection: Keep-Alive 


HTTP/1.1 301 Moved Permanently 
Cache-Control: private, no-cache, no-store, max-age=0, must-revalidate, proxy-revalidate 
Content-Type: text/html;charset=UTF-8 
Expires: Thu, 01 Jan 1970 00:00:00 GMT 
Content-Language: pl-PL 
Location: /film/Igrzyska+%C5%9Bmierci%3A+Kosog%C5%82os.+Cz%C4%99%C5%9B%C4%87+1-2014-626983 
Content-Length: 0 
Accept-Ranges: bytes 
Date: Wed, 07 Oct 2015 13:34:51 GMT 
X-Cache: MISS from blade712.non.3dart.com 
Server: Apache 

Я прочитал другие сообщения и обновлять свой код разными вещами, например.

request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
request.TransferEncoding = "gzip, deflate"; 
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:43.0) Gecko/20100101 Firefox/43.0"; 

request.Referer = "http://www.filmweb.pl/film/Igrzyska+%C5%9Bmierci%3A+Kosog%C5%82os.+Cz%C4%99%C5%9B%C4%87+1-2014-626983"; 
request.KeepAlive = true; 
request.AllowAutoRedirect = true; 
request.MaximumAutomaticRedirections = 250; 
request.Proxy = null; 
request.UseDefaultCredentials = true; 

CookieContainer cookieContainer = new CookieContainer(); 
request.CookieContainer = cookieContainer; 

, но ничего не работает: -/

Может кто-нибудь помочь мне с этой проблемой?

+0

«Я пытаюсь получить исходный код веб-сайта», если он был вашим, чтобы получить у вас его уже есть. – Fred

ответ

0

Перед загрузкой веб-сайта необходимо загрузить начальные файлы cookie, прежде чем вы получите глубокую ссылку.

Следующий код работает для меня:

// cookies 
CookieContainer cookieContainer = new CookieContainer(); 

// make one call to the root of the website 
// to get the cookies set 
Uri uri = new Uri(@"http://www.filmweb.pl"); 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
request.CookieContainer = cookieContainer; 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

using(var s = response.GetResponseStream()) 
{ 
    using(var sr = new StreamReader(s)) 
    { 
     // linqpad 
     sr.ReadToEnd().Dump(); // to check for errors 
    } 
} 

// we have cookies now 
// do the deep link fetch 
uri = new Uri(@"http://www.filmweb.pl/film/Igrzyska+%C5%9Bmierci%3A+Kosog%C5%82os.+Cz%C4%99%C5%9B%C4%87+1-2014-626983"); 
request = (HttpWebRequest)WebRequest.Create(uri); 
request.CookieContainer = cookieContainer; 
response = (HttpWebResponse)request.GetResponse(); 

//store the result 
using(var f = File.Create("C:\\temp\\pl.txt")) 
{ 
    response.GetResponseStream().CopyTo(f); 
} 

Убедитесь, что если вы скрести сайт, который вы придерживаться их лицензии и использования политик. Не делайте ничего, что выходит за рамки добросовестного использования или против любых материалов с копией.

+0

Я делаю приложение только для личного использования, чтобы помочь мне переименовать папки на моем жестком диске, содержащие резервную копию коллекции фильмов, потому что я прекратил использовать диски и хочу иметь все с красивыми именами. Я не знаю, что мне нужно следить за этим для этого использования, но я проверю это. Благодаря! :-) – Marek

Смежные вопросы