2012-10-14 7 views
1

다음 코드가 있는데 이상한 동작이 나타납니다.

다음 웹 페이지를 다운로드하려고하는데 대부분 공백 페이지를 반환하지만 때로는 한 번 작동하지만 동일한 검색은 두 번째로 작동하지 않습니다. 왜, 다른 사이트에서 작동하는 동일한 코드를 가지고 있고 잘 작동하는지 확실하지 않습니다.C# webclient 빈 페이지

http://tpb.pirateparty.org.uk/search/test/0/99/0
'test'는 검색에 따라 변경되는 검색 텍스트입니다.

private static string DownloadHtml() 
{ 
    var client = new WebClient(); 
    var data = client.OpenRead("http://tpb.pirateparty.org.uk/search/test/0/99/0"); 
    var reader = new StreamReader(data); 
    var html = reader.ReadToEnd(); 
    data.Close(); 
    reader.Close(); 
    return html; 
} 

누락 된 부분을 아는 사람이 있습니까?

+0

을 나는 제이 두려워 : 모든 세부 사항을 담당하거나 기본이되는 스트림에 액세스 할 수 있도록 원하는 경우, 다음이 작업을 수행

return new WebClient().DownloadString( "http://tpb.pirateparty.org.uk/search/test/0/99/0"); 

,하지만 귀하의 코드가 내 컴퓨터에서 제대로 작동하는 것 같습니다. 나는 그것을 여러 번 실행했다. 매번 같은 HTML. 웹 클라이언트의 TIMEOUT 특성을 점검 할 수 있습니다. 도움이 될 것입니다. NS에 설정됩니다. – pordi

답변

0

사이트에 대한 요청에서 '나는 브라우저 뒤에있는 인간'대신 '나는 스크립트'라고 말한 것일 수 있습니다. 브라우저에서 검색을 반복해서 수행하면 솔루션에서 헤더가 요청에 올바르게 설정됩니다.

브라우저를 사용할 때 어떤 헤더가 전송되는지 보려면 wireshark 또는 다른 것을 사용하십시오 (User-Agent 필드를 봐야 함). 다음과 같은 명령을 사용하여 헤더를 설정하십시오. 시나의 대답에 추가

myWebClient.Headers.Add("some_header_name","the_value"); 
+0

제안을 주셔서 감사합니다. 헤더가 정확하다고 생각됩니다. –

+0

나는 ppukuid = UPEx9FB6x1mWVkwhAxBMAg ==를 쿠키로 발견했습니다. 그것은 새로 고침 할 때마다 바뀌므로 검색 결과의 첫 번째 페이지를로드 할 수 있습니다. 페이지 2로 이동하면 빈 페이지가 반환됩니다. 나는 이드가 잘못한 것 같아요? 이 방법을 사용할 수 있습니까? –

+0

쿠키 정보를 주위에 복사 할 수 없습니다. 쿠키 정보를 추적하고 요청에 따라 정보를 업데이트하는 것이 가장 좋습니다. – Sheena

2

는 : 또 다른 가능성은 없습니다 제대로 Dispose HTTP 연결을 할 것입니다.

당신은 간단하게 할 수있는 :

var client = new WebClient(); 

using (var data = client.OpenRead(
    "http://tpb.pirateparty.org.uk/search/test/0/99/0")) 
{ 
    var reader = new StreamReader(data); 
    return reader.ReadToEnd(); 
}