HttpWebRequest.GetResponse Возвращает 404, но URL работает в браузере - PullRequest
1 голос
/ 18 октября 2019

В консольном приложении в C # .NET мне нужно получить XML по этому URL-адресу:

https://bdm.insee.fr/series/sdmx/data/SERIES_BDM/000008630?startPeriod=2019

Когда я помещаю URL-адрес в браузере, он работает нормально.

Но когда я пытаюсь получить его в C #, он выдает ошибку 404.

Я перепробовал все, что нашел здесь, что выглядело как моя проблема, но я продолжаю получать 404.

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://bdm.insee.fr/series/sdmx/data/series_bdm/000008630?startPeriod=2019");
    request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko";
    request.Accept = "application/xml";
    HttpWebResponse response = null;
    try
    {
        response = (HttpWebResponse)
        request.GetResponse(); //I get the 404 not found here.
    }
    catch (WebException e)
    {
        Console.WriteLine("\r\nWebException Raised. The following error occured : {0}", e.Status);
    }

Я не думаю, что это проблема с прокси, потому что у меня была эта проблема раньше, и я добавил несколько строк в App.config, чтобы позаботиться об этом. Более того, например, я не получаю 404 за этот URL:

http://nds.nokia.com/uaprof/NN95_8GB-1r100.xml

Один из моих коллег сказал мне, что это SDMX, а не просто XML, но не смогпомогите мне.

Я где-то читал о библиотеке SDMXSource. Но я не понимаю, как использовать его для запроса XML. Я нашел документацию на 54 страницы о том, как создать общую систему распространения usitng sdmxSource, но я не смог найти простой способ заставить мой запрос работать.

Если кто-то может указать мне, куда я должен искать, или найтиЧто я сделал не так, это было бы большой помощью.

Большое спасибо

Вергилий

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Кажется, проблема в том, что URL, который вы нажимаете, чувствителен к регистру. То, что работает:

https://bdm.insee.fr/series/sdmx/data/SERIES_BDM/000008630?startPeriod=2019

В то время как то, что не работает:

https://bdm.insee.fr/series/sdmx/data/series_bdm/000008630?startPeriod=2019

Обратите внимание на сегмент: SERIES_BDM . Это должно быть в верхнем регистре.

"НО ПОЧЕМУ?"Вы можете сказать:

Хотя чувствительность к регистру в URL-адресах может показаться странной для тех, кто работает в основном на ОС под управлением Windows, это совершенно нормально при работе в системах на основе Unix. История восходит к тому, что серверы возвращали только физические файлы при запросе определенного ресурса, и это еще одна история, о которой вы можете узнать больше.

Это интересная тема: https://webmasters.stackexchange.com/questions/90339/why-are-urls-case-sensitive/90341

Вам следуетпойти на большее, конечно; -)

Надеюсь, это поможет!

0 голосов
/ 18 октября 2019

указанный вами URL в HttpWebRequest выглядит неправильно по сравнению с этим URL https://bdm.insee.fr/series/sdmx/data/SERIES_BDM/000008630?startPeriod=2019

попробуйте это

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://bdm.insee.fr/series/sdmx/data/SERIES_BDM/000008630?startPeriod=2019");
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko";
            request.Accept = "application/xml";
            HttpWebResponse response = null;
            try
            {
                response = (HttpWebResponse)
                request.GetResponse(); //it will return OK.
            }
            catch (WebException e)
            {
                Console.WriteLine("\r\nWebException Raised. The following error occured : {0}", e.Status);
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...