尝试在 c# 中下载文件时状态行无效

问题描述 投票:0回答:1

我正在尝试从 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?

c# .net dotnet-httpclient
1个回答
0
投票

HTTP 服务器基本上坏了。

如果您使用浏览器访问该 URL,同时使用 Wireshark 或类似工具记录 TCP/IP 流量,您将看到直接给出响应 - 没有初始状态行、标头等。

您可能会使用

TcpClient
获取数据,但虽然它违反了 HTTP,但我怀疑您将无法使用
HttpClient
或类似的功能。 (最好让托管服务知道它坏了......)

© www.soinside.com 2019 - 2024. All rights reserved.