Как обойти обнаружение HttpWebRequest? - PullRequest
1 голос
/ 18 августа 2011

На самом деле я играю с HtmlAgilityPack.

Я заметил, что он может анализировать HTML из HtmlWebRequest.

Я хотел бы знать, есть ли способ обойтиобнаружение "HttpWebRequest"?Это потому, что когда я пытался использовать HttpWebRequest для получения содержимого HTML, кажется, что сервер знает, что я использую «HttpWebRequest», и не позволяет мне извлекать HTML изнутри.

Вот мой исходный код:

protected void Page_Load(object sender, EventArgs e)
{
    var targetUrl = new Uri("http://www.aastocks.com/tc/ltp/rtquote.aspx?symbol=03800");
    var webReq = (HttpWebRequest)WebRequest.Create(targetUrl);
    WebResponse webRes = webReq.GetResponse();
    System.IO.Stream stream = webRes.GetResponseStream();
    System.Text.Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
    System.IO.StreamReader reader = new System.IO.StreamReader(stream, encode);            
    HtmlDocument doc = new HtmlDocument();
    doc.Load(reader);
    foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//html"))
    {
        Label1.Text += link.InnerHtml;
    }
}

Я не пытаюсь что-то сделать, чтобы нарушить авторские права, но просто любопытно по этому поводу.

Ответы [ 2 ]

4 голосов
/ 18 августа 2011

Нет такого понятия, как обнаружение HttpWebRequest.

Однако страница, к которой вы обращаетесь, может быть не такой простой: она может быть загружена несколькими HTTP-запросами (iframes) или через AJAX или требовать определенных заголовков HTTP в запросе.Лучшее, что я могу посоветовать: отслеживать HTTP-трафик между вашим браузером и веб-сайтом (например, с помощью Fiddler ).Затем отследите трафик между вашим приложением (которое отправляет запрос программно) и тем же веб-сайтом.

Найдите разницу и заставьте ваше приложение вести себя точно так же, как браузер.

0 голосов
/ 19 августа 2011

Спасибо Shadow Wizard, программа работает сейчас.

Решение заключается в установке UserAgent после webReq.Create (targetUrl).

webReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)";
...