Question

Le code suivant échoue avec 400 mauvaise exception de la demande. Ma connexion réseau est bonne et je peux aller sur le site, mais je ne peux pas obtenir ce uri avec 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);                
    }
}
Était-ce utile?

La solution

Tout d'abord, jeté WebRequest à un HttpWebRequest comme ceci:

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

Ensuite, ajoutez cette ligne de code:

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

Autres conseils

Set UserAgent et Referer 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);
}

Il pourrait y avoir de nombreuses causes de ce problème. Avez-vous des plus de détails sur le WebException?

L'une des causes que j'ai rencontré avant, est que vous avez une mauvaise chaîne de l'agent utilisateur. Certains sites Web (Google, par exemple), vérifier que les demandes proviennent d'agents utilisateurs connus pour empêcher les robots collecteurs automatisés de frapper leurs pages.

En fait, vous pouvez vérifier que l'accord d'utilisateur pour YouTube ne vous empêche pas de faire ce que vous faites. Si oui, alors ce que vous faites peut être mieux accompli en passant par des canaux approuvés tels que les services Web.

Peut-être que vous avez un serveur exécutant proxy, et vous avez pas encore défini la propriété Proxy du HttpWebRequest?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top