2011-01-27 2 views
3

는 여기에 내가 실행하는 데 노력하고있어 코드입니다 :WebClient가 wikipedia 열기 페이지를 금지하고 있습니까?

var wc = new WebClient(); 
var stream = wc.OpenRead(
      "http://en.wikipedia.org/wiki/List_of_communities_in_New_Brunswick"); 

하지만 403 금지 오류가 계속. 이유를 이해하지 마십시오. 다른 페이지에서도 잘 작동했습니다. 브라우저에서 페이지를 열 수 있습니다. 이 문제를 어떻게 해결할 수 있습니까?

답변

10

나는 보통 OpenRead()을 사용하지 않으므로 대신 DownloadData() 또는 DownloadString()을 사용해보십시오. 또한

그것은 위키 피 디아 당신이 사용자 에이전트 문자열 제공하지 않았기 때문에 의도적으로 요청을 차단하고있을 수 있습니다 나는 꽤 자주 웹 클라이언트를 사용

WebClient client = new WebClient(); 
client.Headers.Add("user-agent", 
    "Mozilla/5.0 (Windows; Windows NT 5.1; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4"); 

을 아주 신속하게 웹 사이트와 귀하의 요청을 차단 할 수 배웠습니다 알려진 웹 브라우저와 일치하는 사용자 에이전트 문자열을 제공하지 않는 경우 또한 사용자 에이전트 문자열 (예 : "my super cool web scraper")을 구성하면 차단됩니다.

[편집]

나는 파이어 폭스의 현대 버전의 내 예를 들어 사용자 에이전트 문자열을 변경했습니다. 내가 준 원래 예제는 좋은 생각이 아닌 IE6 용 사용자 에이전트 문자열입니다. 왜? 일부 웹 사이트는 IE6을 기반으로 필터링을 수행하고 해당 브라우저를 사용하는 사람에게 메시지를 보내거나 "브라우저를 업데이트하십시오"라는 다른 페이지로 보낼 수 있습니다. 즉, 얻으려는 콘텐츠를 얻지 못합니다.

+1

OpenRead() 대신'DownloadString()'을 사용하면 사용자 에이전트를 지정하거나 지정하지 않고 작동합니다. 어떠한 이유로 든'OpenRead()'를 사용하기를 원한다면, 사용자 에이전트 문자열을 헤더에 추가하면 * 작동 *합니다. –

+0

다른 지역에서는 괜찮 았기 때문에 이상한데 ... 사용자 에이전트 문자열을 추가하면 NB에서 수정되었습니다. 감사! 왜'DownloadString'이 어떤 변화를 가져야합니까? 같은 방식으로 연결됩니다. 그렇죠? – mpen

+1

@Nathan 어쨌든 잘 알려진 사용자 에이전트를 사용합니다. 웹 사이트가 변경되어 현재 빈 사용자 에이전트가 거부되는 2 개월이 지나면 어떻게 될까요? 코드가 경고없이 중단되고 문제를 찾는 것이 매우 어려울 것입니다. 그러나 알려진 사용자 에이전트를 갑자기 거부하지 않을 것이라고 확신 할 수 있습니다. –

관련 문제