2017-11-15 11 views
-2
내가이 http://www.yellowpages.ae/categories-by-alphabet/h.html URL

WebRequest 클래스 HTML

를로드 할

를 반환하지만 내가 쿠키 컨테이너를 추가하는 방법에 대해 들어 본 적이 있지만, 내 코드가 이미 몇 가지 질문에

null을 반환하지.

var MainUrl = "http://www.yellowpages.ae/categories-by-alphabet/h.html"; 
HtmlWeb web = new HtmlWeb(); 
web.PreRequest += request => 
{ 
    request.CookieContainer = new System.Net.CookieContainer(); 
    return true; 
}; 
web.CacheOnly = false; 
var doc = web.Load(MainUrl); 

웹 사이트는 브라우저에서 완벽하게 열립니다.

답변

1

쿠키를 얻고 UseCookietrue, HtmlWeb으로 설정하려면 CookieCollection이 필요합니다.

CookieCollection cookieCollection = null; 
var web = new HtmlWeb 
{ 
    //AutoDetectEncoding = true, 
    UseCookies = true, 
    CacheOnly = false, 
    PreRequest = request => 
    { 
     if (cookieCollection != null && cookieCollection.Count > 0) 
      request.CookieContainer.Add(cookieCollection); 

     return true; 
    }, 
    PostResponse = (request, response) => { cookieCollection = response.Cookies; } 
}; 

var doc = web.Load("https://www.google.com"); 
0

쿠키 문제 일까 의심됩니다. 내가 페이지를 가져 오려고 할 때 나는 횡설수설 뿐이 기 때문에 gzip 암호화처럼 보입니다. 쿠키 문제인 경우 응답에서 오류를 반환해야합니다. 아무리 해도. 여기 당신의 문제에 대한 나의 해결책이있다.

public static void Main(string[] args) 
{ 
    HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
    try 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.yellowpages.ae/categories-by-alphabet/h.html"); 
     request.Method = "GET"; 
     request.ContentType = "text/html;charset=utf-8"; 
     request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

     using (var response = (HttpWebResponse)request.GetResponse()) 
     { 
      using (var stream = response.GetResponseStream()) 
      { 
       doc.Load(stream, Encoding.GetEncoding("utf-8")); 
      } 
     } 
    } 
    catch (WebException ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
    Console.WriteLine(doc.DocumentNode.InnerHtml); 
    Console.ReadKey(); 
} 

우리가받는 gzip 메시지를 해독하거나 추출한다는 것입니다. 내가 물어 본 GZIP이 어땠는지 어떻게 알 수 있었습니까? 디버거의 응답 스트림에서 ContentEncoding이 gzip이라고했습니다. 코드에

request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

당신은 좋은 위치 :

는 기본적으로 바로 추가 할 수 있습니다.