C # HttpWebRequest показывает 404, но сайт доступен в браузере - PullRequest
2 голосов
/ 15 ноября 2010

Я пытаюсь загрузить XML-файл с веб-сайта с помощью C #, но я получаю 404 на некоторых URL.это связано, потому что они все еще работают в браузере.Другие URL-адреса по-прежнему работают без проблем.

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

Этот URL-адрес является одним из указанных проблемных URL-адресов:

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

решено .... забыто урезать URL;)

Ответы [ 4 ]

3 голосов
/ 15 ноября 2010

Я могу только предположить, что хост-сайту может не понравиться ваш UserAgent, и он возвращает сообщение 404

2 голосов
/ 03 декабря 2014

Я решил эту проблему с помощью этого:

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;
1 голос
/ 16 ноября 2010

Для загрузки XML-документа вы можете использовать метод 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);
0 голосов
/ 15 ноября 2010

Может быть

1) Каким-то образом вы вводите неправильный URL: можете ли вы попробовать поставить

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

вместо

  WebRequest.Create(url);

для целей тестирования.

2) У вас есть механизм фильтрации HTTP, который различает VS и запросы браузера

...