2009-03-31 4 views
7

다음 코드는 400 개의 잘못된 요청 예외로 인해 실패합니다. 내 네트워크 연결이 양호하고 사이트에 갈 수 있지만 HttpWebRequest를 사용하여이 URI를 가져올 수 없습니다.내 HttpWebRequest가 잘못된 400 요청을 반환하는 이유는 무엇입니까?

private void button3_Click(object sender, EventArgs e) 
{ 
    WebRequest req = HttpWebRequest.Create(@"http://www.youtube.com/"); 
    try 
    { 
     //returns a 400 bad request... Any ideas??? 
     WebResponse response = req.GetResponse(); 
    } 
    catch (WebException ex) 
    { 
     Log(ex.Message);     
    } 
} 
+0

asp.net 또는 windows 양식입니까? – eglasius

답변

13

첫째, HttpWebRequest를 같은에 WebRequest 클래스 캐스트 : 당신의 HttpWebRequest를

req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; 
+0

이것은 챔피언처럼 작동합니다! – user74373

3

아마도 프록시 서버가 실행 중이고 HttpWebRequest의 프록시 속성을 설정하지 않았습니까?

+0

좋습니다. 이건 내가 쓰고있는 프록시 내부 다. – user74373

4

이 문제의 원인은 여러 가지가 있습니다. WebException에 대한 더 자세한 정보가 있습니까?

내가 전에 실행 한 원인 중 하나는 사용자 에이전트 문자열이 잘못되었다는 것입니다. 일부 웹 사이트 (예 : Google)는 자동 로봇이 자신의 페이지를 공격하지 못하도록 알려진 사용자 에이전트에서 요청이 오는지 확인합니다.

실제로 YouTube에 대한 사용자 계약이 귀하의 업무 수행을 방해하지 않는지 확인할 수 있습니다. 그렇다면 웹 서비스와 같이 승인 된 채널을 통해 더 잘 수행 될 수 있습니다.

5

설정 해당 UserAgent리퍼러 :

다음
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(@"http://www.youtube.com/"); 

는,이 코드 줄을 추가 :

var request = (HttpWebRequest)WebRequest.Create(@"http://www.youtube.com/"); 
request.Referer = "http://www.youtube.com/"; // optional 
request.UserAgent = 
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; " + 
    "Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; " + 
    ".NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; " + 
    "InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)"; 
try 
{ 
    var response = (HttpWebResponse)request.GetResponse(); 
    using (var reader = new StreamReader(response.GetResponseStream())) 
    { 
     var html = reader.ReadToEnd(); 
    } 
} 
catch (WebException ex) 
{ 
    Log(ex); 
} 
+0

나는 그가 Debug.WriteLine (ex.ToString())을 사용하도록 제안한다. 그래서 그는 메시지뿐만 아니라 전체 예외를 얻는다. –

+0

@ 존, 그게 말이 되네. –

관련 문제