일부 정보를 수집하기 위해 서버에 요청을 계속 전송하는 웹 스크래핑 또는 크롤러 C# .NET 응용 프로그램을 구축 중입니다. 문제는이 특정 서버의 특정 웹 페이지에 대해 웹 응답이 항상 404 찾을 수 없다는 것입니다. 그러나 놀랍게도 필자는 "피들러"가 작동하는 한 문제가 사라지고 요청이 성공적인 응답으로 반환된다는 것을 발견했습니다. 나는 대답을 찾고 나서 웹을 찾고 있었지만 아무것도 발견하지 못했습니다. 밝은면에서, 웹을 검색하고 Fiddler의 타임 라인 기능을 분석 한 후에 나는 결론에 도달했습니다.C#의 버퍼링 모드에서 피들러 요청 시뮬레이션
1.Fiddler는 응용 프로그램이 스트림 모드를 사용하는 동안 버퍼 모드를 사용하여 이러한 웹 페이지를로드합니다. 2. Fiddler가 연결을 다시 사용하는 것으로 나타나거나 Keep-Alive라는 단어가 true로 설정되었습니다.
이제 질문은 Fiddler가 버퍼 모드에서 웹 응답을로드하는 방법과 Fiddler가 실제로 응답을 수정하여 응답을 수정하는지 여부를 모방하거나 시뮬레이션 할 수 있습니다. 나는 내 페이지를 요청하기 위해 HttpWebRequest와 HttpWebResponse를 사용하고있다. 클라이언트 (내 서버)에 데이터를 반환하기 전에 httpwebresponse를 완전히 버퍼링하는 방법이 필요합니다.
공공 정적 문자열의 getCookie (문자열 이름, 문자열 암호) { 의 HttpWebRequest 요청 = (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;
}
FWIW, 버퍼링은 동작의 변경을 일으키는 것이 아닙니다. 뭔가 다른 일이있어. FWIW, GetResponseStream에서 반환 된 객체에서 .Close()를 호출해야합니다. 그것은 많은 사람들을 위로 이동시킵니다. – EricLaw