Domanda

Il seguente codice non riesce con un'eccezione richiesta di cattivo 400. La mia connessione di rete è buona e posso andare al sito ma non riesco a ottenere questo uri con 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);                
    }
}
È stato utile?

Soluzione

In primo luogo, scagli la WebRequest a un HttpWebRequest in questo modo:

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

Quindi, aggiungere questa riga di codice:

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

Altri suggerimenti

Imposta AgenteUtente e Referer in 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);
}

Ci potrebbero essere molte cause per questo problema. Avete ulteriori dettagli circa la WebException?

Una causa, che ho incontrato prima, è che si dispone di una stringa user agent male. Alcuni siti web (Google per esempio) verificare che le richieste sono provenienti da noti agenti utente per evitare bot automatici da colpire loro pagine.

In realtà, si consiglia di controllare che l'accordo utente per YouTube non ti preclude la possibilità di fare quello che stai facendo. Se è così, allora quello che stai facendo potrebbe essere meglio realizzato passando attraverso canali approvati come i servizi web.

Forse hai un server proxy in esecuzione, e non è stato impostato la proprietà Proxy del HttpWebRequest?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top