Pergunta

O código a seguir falha com uma má exceção pedido 400. Minha conexão de rede é bom e eu posso ir para o site, mas eu não posso começar esse URI com HttpWebRequest.

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);                
    }
}
Foi útil?

Solução

Em primeiro lugar, lançar o WebRequest a um como este HttpWebRequest:

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

Em seguida, adicione esta linha de código:

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

Outras dicas

Set UserAgent e Referer no seu 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);
}

Pode haver muitas causas para este problema. Você tem mais detalhes sobre o WebException?

Uma das causas, que eu correr em diante, é que você tem uma seqüência do agente do usuário ruim. Alguns sites (google por exemplo) verificar que as solicitações são provenientes de agentes de usuário conhecido para evitar bots automatizados de bater suas páginas.

Na verdade, você pode querer verificar que o contrato de usuário para o YouTube não impede você de fazer o que está fazendo. Se isso acontecer, então o que você está fazendo pode ser mais bem conseguido, indo através de canais aprovados, tais como serviços web.

Talvez você tem uma corrida servidor proxy, e você não tiver definido a propriedade Proxy do HttpWebRequest?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top