Имитация запросов Fiddler в режиме буферизации в C # - PullRequest
0 голосов
/ 25 сентября 2011

Я создаю веб-приложение C # .NET, которое постоянно отправляет запросы на сервер для сбора некоторой информации. Проблема в том, что для определенных веб-страниц для этого конкретного сервера этот веб-ответ всегда 404 не найден. Как ни удивительно, но я обнаружил, что, пока работает «Fiddler», проблема, кажется, исчезает, и запрос возвращается с успешным ответом. Я искал в Интернете с тех пор как искал ответ, но не нашел ни одного С другой стороны, после поиска в Интернете и анализа временной шкалы Фиддлера я пришел к некоторым выводам.

1.Fiddler загружает эти веб-страницы в буферизованном режиме, а мое приложение использует потоковый режим 2. Также представляется, что Fiddler повторно использует соединение или, другими словами, Keep-Alive установлен в true.

И теперь вопрос заключается в том, как я могу имитировать или имитировать способ, которым Fiddler загружает веб-ответ в режиме с буферизацией, и действительно ли Fiddler выполняет какой-то трюк (т.е. изменяет ответ), чтобы получить правильный ответ. Я использую HttpWebRequest и HttpWebResponse для запроса своих страниц. Мне нужен способ полной буферизации httpwebresponse перед возвратом данных клиенту (который является моим сервером).

публичная статическая строка getCookie (имя пользователя строки, пароль строки) { HttpWebRequest request = (HttpWebRequest) WebRequest.Create ("определенная ссылка");

       request.UserAgent = "Mozilla/5.0 (Windows NT 6.0; rv:6.0.2) Gecko/20100101 Firefox/6.0.2";


       request.Credentials = new NetworkCredential(username, password);


       HttpWebResponse wr = (HttpWebResponse)request.GetResponse();
           String y = wr.Headers["Set-Cookie"].ToString();
           return y.Replace("; path=/", "");


   }

   /// <summary>
   /// Requests the html source of a given web page, using the request credentials given.
   /// </summary>
   /// <param name="username"></param>
   /// <param name="password"></param>
   /// <param name="webPageLink"></param>
   /// <returns></returns>
   public static String requestSource(String username,String password,String webPageLink){
       String source = "";

           HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webPageLink);


       if (username != null && password != null)
       {
           request.Headers["Cookie"] = getCookie(username, password);


           request.UserAgent = "Mozilla/5.0 (Windows NT 6.0; rv:6.0.2) Gecko/20100101 Firefox/6.0.2";

           request.Credentials = new NetworkCredential(username, password);
       }
       StreamReader sr;

       using (HttpWebResponse wr = (HttpWebResponse)request.GetResponse())
       {
           sr = new StreamReader(wr.GetResponseStream());
           source = sr.ReadToEnd();
       }



       return source;
   }

Ответы [ 2 ]

0 голосов
/ 26 сентября 2011

Может ли быть так, что ваш скребок обнаруживается и отключается, а Fiddler замедляет его настолько, что его не обнаруживают? http://google -scraper.squabbel.com /

0 голосов
/ 26 сентября 2011

Вы пытались взглянуть на свойство HttpWebRequest AllowWriteStreamBuffering?Также вы можете попытаться добавить все заголовки Fiddler к вашему запросу, чтобы быть как можно ближе к Fiddler.

...