htmlagilitypack을 사용하여 https URL에서 HTML 데이터를 다운로드 할 수 없습니다.

c# html html-agility-pack https web-scraping

문제

htmlagilitypack (HAP)에 "작은"문제점이 있습니다. 웹 사이트에서 데이터를 가져 오려고하면이 오류가 발생합니다.

처리되지 않은 'System.ArgumentException'형식의 예외가 mscorlib.dll에서 발생했습니다.

추가 정보 : 'gzip'은 지원되는 인코딩 이름이 아닙니다. 사용자 지정 인코딩 정의에 대한 자세한 내용은 Encoding.RegisterProvider 메서드에 대한 설명서를 참조하십시오.

이 코드를 사용하여 웹 사이트에서 데이터를 가져옵니다.

HtmlWeb page = new HtmlWeb();
var url = "https://kat.cr/";
var data = page.Load(url);

이 코드 후에 나는 그 오류가 발생합니다. 나는 구글에서 모든 것을 시도했지만 아무 도움도받지 못했다.

누군가이 문제를 해결하는 방법을 말해 줄 수 있습니까?

고맙습니다

수락 된 답변

HtmlWeb 은 https에서 다운로드를 지원하지 않습니다. 따라서 대신 WebClient약간 수정 하여 GZip 을 자동으로 압축 해제 할 수 있습니다.

class MyWebClient : WebClient
{
    protected override WebRequest GetWebRequest(Uri address)
    {
        HttpWebRequest request = base.GetWebRequest(address) as HttpWebRequest;
        request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
        return request;
    }
}

그런 다음 HtmlDocument.LoadHtml() 을 사용하여 HTML 문자열에서 HtmlDocument 인스턴스를 채 웁니다.

var url = "https://kat.cr/";
var data = new MyWebClient().DownloadString(url);
var doc = new HtmlDocument();
doc.LoadHtml(data);

인기 답변

요청에 따라 HtmlWeb 을 사용하여 요청을 가로 챌 수 있습니다.

var page = new HtmlWeb()
{
  PreRequest = request =>
  {
    // Make any changes to the request object that will be used.
    request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
    return true;
  }
};

var url = "https://kat.cr/";
var data = page.Load(url);


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.