내 httpwebrequest가 400 불량 요청을 반환하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/702079

  •  22-08-2019
  •  | 
  •  

문제

다음 코드는 400 불량 요청 예외로 실패합니다. 내 네트워크 연결이 좋고 사이트로 갈 수 있지만 httpwebrequest 로이 URI를 얻을 수는 없습니다.

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);                
    }
}
도움이 되었습니까?

해결책

먼저 WebRequest를 다음과 같이 httpwebrequest에 캐스트합니다.

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

그런 다음이 코드 라인을 추가하십시오.

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

다른 팁

세트 사용자 에이전트 그리고 참조 자 당신의 httpwebrequest:

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);
}

이 문제에 대한 많은 원인이있을 수 있습니다. WebException에 대한 자세한 내용이 있습니까?

내가 전에 겪은 원인 중 하나는 사용자 에이전트 문자열이 잘못되기 때문입니다. 일부 웹 사이트 (예 : Google)는 자동화 된 봇이 페이지에 도달하는 것을 방지하기 위해 알려진 사용자 에이전트로부터 요청이 제공되는지 확인합니다.

실제로 YouTube의 사용자 계약이 귀하가하고있는 일을하지 않는지 확인할 수 있습니다. 그렇다면 웹 서비스와 같은 승인 된 채널을 통해 당신이하고있는 일이 더 잘 이루어질 수 있습니다.

어쩌면 프록시 서버가 실행 중이며 HTTPWebrequest의 프록시 속성을 설정하지 않았습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top