在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创建通用传播系统,但找不到使请求工作正常的简单方法。
如果有人可以将我指向应该看的地方,或者发现我做错了什么,那将是很大的帮助。
非常感谢您
维吉尔
答案 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);
}