2013-10-31 1 views
1

WebClient을 사용하여 일부 URL을 쿼리하려고합니다.원격 서버 (403) WebClient 사용 중 금지 된 오류

나는 루프를 통해 QueryString 값을 얻고 최종 URL을 만든 다음 클라이언트에 전달하는 컬렉션이 있습니다. 내가 처음으로 대한 응답을받을 경우

System.Net.WebException --> The remote server returned an error: (403) Forbidden.

: 그것은 루프 두 번째 시간에 갈 때

이 잘 실행됩니다 난생 처음

, 나는, 그러나, 적절한 응답을 얻을, 나는 오류가 발생합니다. 그럼 나는 나머지 컬렉션을 받아야한다.

실마리가 있습니까? 내가 누락 될 수있는 것은 무엇입니까?

아래 코드는 제가 사용하고있는 코드입니다.

using(System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\sample.text")) { 
    foreach(var f in fileCollections) { 
     strFinalURL = string.Empty; 

     strFinalURL = "someURL" + f; // f can be considered as querystring param value 

     try { 
      using(var client = new WebClient()) { 

       test = client.DownloadString(strFinalURL); 
       if (!test.Contains("somecondition")) { 
        file.WriteLine(""); 
       } 
      } 
     } catch (System.Exception ex) { 
      Console.WriteLine(ex.Message); 
     } 
    } 
} 
+0

동일한 도메인의 모든 URL입니까? 403을 반환하는 URL은 브라우저를 통해 액세스 할 수 있습니까? –

+0

@codingstill 예, 모든 URL은 동일한 도메인의 주소이며 브라우저를 통해 액세스 할 수 있습니다. – Amit

+3

당신이 말한 것이 모두 맞다면 서버 조절이 부분을 담당하고있는 것 같습니다. 전략적으로 배치 된'Thread.Sleep'을 사용하여 약간 느리게하면 어떻게됩니까? – spender

답변

1

당신이 말한 것이 모두 맞다면, 서버 조절이 부분을 담당하고있는 것으로 생각됩니다. 반복 속도를 늦추려면 루프에 Thread.Sleep을 추가하십시오.

12

일부 웹 서버는 사용자 에이전트 문자열을 기반으로 요청을 차단할 수 있습니다. 귀하의 경우 사용자 에이전트로 빈 문자열을 보냅니다. 브라우저의 사용자 에이전트를 추가하려고하면 모든 브라우저가 정상적으로 작동합니다. 예를 들어

: 사용자 에이전트의 목록

client.Headers.Add("user-agent", " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0"); 

, 당신은 here을 클릭 할 수 있습니다.

+1

이 문제는 해결되었습니다. 그걸 결코 생각하지 않았을거야! – Simon