HttpWebRequest.GetResponse返回404,但URL在浏览器中有效

时间:2019-10-18 12:00:39

标签: c# xml

在C#.NET的控制台应用程序中,我需要从以下URL获取XML:

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:

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

我的一位同事告诉我,这是SDMX,而不仅仅是XML,但无法帮助我。

我在某处阅读了有关SDMXSource库的内容。但是我不明白如何使用它来请求获取XML。我找到了一份长达54页的文档,内容涉及如何使用sdmxSource创建通用传播系统,但找不到使请求工作正常的简单方法。

如果有人可以将我指向应该看的地方,或者发现我做错了什么,那将是很大的帮助。

非常感谢您

维吉尔

2 个答案:

答案 0 :(得分:1)

问题似乎是您输入的网址区分大小写。有效的是:

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

您当然应该多学点;-)

希望这会有所帮助!

答案 1 :(得分:0)

您在HttpWebRequest中给定的URL与该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);
            }