You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#下载XML遇无效状态行错误,疑HTTP 0.9版本不兼容

解决.NET因HTTP 0.9不兼容导致的XML下载错误

问题原因

没错,你的问题根源就是.NET的HTTP客户端(包括XDocument.Load和HttpClient)默认不支持HTTP 0.9协议。HTTP 0.9是非常老旧的极简协议,响应没有状态行、响应头,直接返回原始内容。而.NET的客户端会严格按照HTTP/1.0及以上的规范解析响应,把返回的XML第一行误识别为状态行,从而抛出"Received an invalid status line"错误。

解决方法

由于高级HTTP客户端不支持HTTP 0.9,需要直接使用TcpClient手动建立TCP连接,构造HTTP 0.9请求并读取响应内容。以下是完整实现:

手动下载HTTP 0.9内容的方法

using System;
using System.IO;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

public static class Http09Client
{
    public static async Task<string> DownloadContentAsync(string url)
    {
        var uri = new Uri(url);
        // 连接目标服务器的80端口(HTTP默认端口)
        using var tcpClient = new TcpClient();
        await tcpClient.ConnectAsync(uri.Host, uri.Port == -1 ? 80 : uri.Port);

        // 构造HTTP 0.9请求:仅包含GET请求行,无额外头部
        var request = $"GET {uri.PathAndQuery} HTTP/0.9\r\n\r\n";
        var requestBytes = Encoding.ASCII.GetBytes(request);

        using var stream = tcpClient.GetStream();
        // 发送请求
        await stream.WriteAsync(requestBytes, 0, requestBytes.Length);

        // 读取响应:HTTP 0.9直接返回原始内容,这里指定目标编码Windows-1250
        using var reader = new StreamReader(stream, Encoding.GetEncoding("Windows-1250"));
        return await reader.ReadToEndAsync();
    }
}

使用示例

public static async Task Run()
{
    string url = "http://www.strava.cz/foxisapi/foxisapi.dll/istravne.istravne.process?xmljidelnickyA&zarizeni=0000";
    string xmlContent = await Http09Client.DownloadContentAsync(url);

    // 将XML内容加载到XDocument
    var xmlDoc = XDocument.Parse(xmlContent);
    // 后续转换为DataTable的逻辑(根据XML结构自行实现)
}

注意事项

  • 该实现仅适用于HTTP协议,若目标是HTTPS需要额外用SslStream包装TCP流
  • 需要手动处理编码(目标返回的是Windows-1250编码,需对应指定)
  • 没有内置重定向、错误处理逻辑,若需要可自行添加判断
  • 仅针对HTTP 0.9的简单场景,不适用于复杂的HTTP交互

内容的提问来源于stack exchange,提问作者T0biasCZe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:57:27