2 votes

C# HttpWebRequest affiche 404, mais le site est accessible dans le navigateur.

J'essaie de télécharger un fichier xml à partir d'un site web avec c#, mais j'obtiens un 404 sur certaines urls. C'est câblé car elles fonctionnent toujours dans le navigateur. D'autres urls fonctionnent sans problème.

HttpWebRequest request = (HttpWebRequest)
            WebRequest.Create(url);
        request.Method = "GET";
        request.Timeout = 3000;
        request.UserAgent = "Test Client";
        HttpWebResponse response = null;
            try
            {
                response = (HttpWebResponse)
                    request.GetResponse();
            }
            catch (WebException e)
            {
                response = (HttpWebResponse)e.Response;
            }
            Console.WriteLine("- "+response.StatusCode);

        XmlTextReader reader = XmlTextReader(response.GetResponseStream());

Cette URL est l'une des URL problématiques mentionnées :

http://numerique.bibliotheque.toulouse.fr/cgi-bin/oaiserver?verb=ListMetadataFormats

SOLVED....pour oublier de couper l'url ;)

3voto

climbage Points 5742

Je ne peux que supposer que le site hôte n'apprécie pas votre UserAgent et renvoie un message 404

2voto

Paulos02 Points 39

J'ai résolu ce problème en utilisant ceci :

var client = (HttpWebRequest)WebRequest.Create(uri);
client.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
client.CookieContainer = new CookieContainer();
client.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
var htmlCodae = client.GetResponse() as HttpWebResponse;

1voto

Edward83 Points 1894

Pour télécharger un document xml, vous pouvez utiliser la méthode DownloadString :

System.Net.WebClient client = new System.Net.WebClient();

String url = "http://stackoverflow.com/feeds/question/4188449";

String xmlSource = client.DownloadString(url);

Console.WriteLine(xmlSource);

0voto

ivo s Points 104

Peut-être

1) Vous avez saisi une url incorrecte : pouvez-vous essayer de mettre

   WebRequest.Create(@"http://numerique.bibliotheque.toulouse.fr/cgi-bin/oaiserver?verb=ListMetadataFormats");

au lieu de

  WebRequest.Create(url);

à des fins de test.

2) Vous disposez d'un mécanisme de filtrage HTTP qui fait la distinction entre les demandes du VS et celles du navigateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X