我正在尝试从 C# 代码的 URL 下载 xml,这样我就可以将其加载到数据表中。
我尝试了这个非常简单的代码
public static void run() {
string url = "http://www.strava.cz/foxisapi/foxisapi.dll/istravne.istravne.process?xmljidelnickyA&zarizeni=0000";
var xml = XDocument.Load(url);
}
这应该可以工作,但是,当我运行它时,它会抛出错误
System.Net.Http.HttpRequestException: Received an invalid status line: '<?xml version="1.0" encoding="Windows-1250" standalone="yes"?>'.
我也尝试直接使用httpclient下载它:
public static async Task run() {
string url = "http://www.strava.cz/foxisapi/foxisapi.dll/istravne.istravne.process?xmljidelnickyA&zarizeni=0000";
var client = new HttpClient();
var response = await client.GetStringAsync(url);
}
但是它会崩溃并显示完全相同的错误代码,即状态行无效(它尝试解析为状态行的是下载的 xml 文件中的第一行)
我该如何解决这个崩溃问题?
编辑: 我尝试使用curl下载该文件,但它抛出http 0.9 not allowed。然后我尝试允许 --http0.9,它正确显示了文件的内容。 我还查看了 Firefox 中显示的响应标头,它显示版本 http 0.9。 难道只是 .NET 不支持这个旧版本的 HTTP?
HTTP 服务器基本上坏了。
如果您使用浏览器访问该 URL,同时使用 Wireshark 或类似工具记录 TCP/IP 流量,您将看到直接给出响应 - 没有初始状态行、标头等。
您可能会使用
TcpClient
获取数据,但虽然它违反了 HTTP,但我怀疑您将无法使用 HttpClient
或类似的功能。 (最好让托管服务知道它坏了......)