2014-12-02 4 views
0

왜 WebExceptionStatus.ProtocolError가 생성되지 않습니까? 대신 나는 WebExceptionStatus.UnknownError이됩니다. 잘못된 URL로 인해 400 또는 404 코드 대신 UnknownError가 발생하는 이유는 무엇입니까? WebException

string url = "http://www.ogggle.com/"; // a bad url 

var request = (HttpWebRequest) WebRequest.Create(url); 

은 ... 옵션 설정은 이제 WebException이 발생합니다
using (var response = (HttpWebResponse) request.GetResponse()) 
    { 
     foreach (Cookie cookie in response.Cookies) 
      cookies.Add(cookie); 

     string urlContent = ""; 
     using (var sr = new StreamReader(response.GetResponseStream())) 
      urlContent = sr.ReadToEnd(); 

     return urlContent; 
    } 

을 ellided; 그러나 WebExceptionStatus는 실제로 UnknownError입니다. 나는 ProtocolError를 기대하고 있습니다.

catch (WebException we) 
    { 
    string message = "WEB EXCEPTION DETECTED. Retry counter: " + _retryCount; 
    message += Environment.NewLine + "Problem with url: " + url + ". Status is: " + we.Status; 
    message += Environment.NewLine + "Message is: " + we.Message; 

    if (we.Status == WebExceptionStatus.ProtocolError) 
    { 
     message += Environment.NewLine + string.Format("Status Code : {0}", ((HttpWebResponse)we.Response).StatusCode); 
     message += Environment.NewLine + string.Format("Status Description : {0}", ((HttpWebResponse)we.Response).StatusDescription); 
    } 

    WriteToErrorLog(message); 
    if (DEBUG) 
     Console.WriteLine(message); 
    _retryCount++; 
    } 

내 생각에 WebException은 이보다 더 똑똑해야합니다. 형식이 잘못되었거나 잘못된 URL은 의미있는 WebExceptionStatus가됩니다. 대신 도움이되지 않는 UnknownError가 발생합니다. 아무도 내가 URL을 나쁜 때 WebException 의미를 얻는 방법을 이해하는 데 도움이 될 수 있습니까?

+0

HTTP 상태 코드는 HTTP 응답에서 가져옵니다. URL을 호스트 이름으로 구문 분석 할 수 없으면 HTTP 응답이 없습니다. – SLaks

+0

응답을 읽으려고 했습니까? var resp = new StreamReader (we.Response.GetResponseStream()). ReadToEnd();'? 어쩌면 도움이 될지도 모른다. –

+0

URL을 구문 분석 할 수있는 URL로 변경하여 수정했습니다. – sapbucket

답변

0

문제가 무엇인지 파악하는 데 충분한 정보를 제공하지 않았습니다. "bad"URL은 무엇인가요? 문제가 있습니까? WebRequest.Create(string)new Url(string)을 호출합니다.이 문자열은 유효한 문자열이 아닌 경우 UriFormatException 예외를 발생시킵니다. 그게 당신이 주어진 코드와 문자열로하는 일입니다.

+0

나는 1000 초가 넘는 가능한 URL 문자열 조합을 치환하는 URL 문자열 생성기를 사용하고 있습니다. 약 10 %가 유효합니다. 그런 다음 타당한 페이지에서 데이터를 가져 오기 위해 대상 웹 사이트를 폭파합니다. 응답 과정을 거친 후에야 유효한지 여부를 알 수 없습니다. 웬일인지 나는 위에서 쓴 행동을 얻는다. – sapbucket

+0

원래 주어진 URL을 "aBadUrl"에서 "http://www.ogggle.com/"으로 변경 한 후 이제는 'NameResolutionFailure' 상태의'WebException'을 제공합니다. 이는 합리적인 것처럼 보이고 여전히 문제. –

+0

그게 바로 내가하고 싶은 일입니다. 확인해 주셔서 감사합니다. 다시 한 번 디버깅하여보고있는 내용을 재현 할 수 있는지 확인합니다. – sapbucket