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

为何调用维基百科API返回HTML而非XML内容?

解决维基百科API返回HTML而非XML的问题

问题原因

  1. API参数大小写错误:维基百科API的参数名区分大小写,你使用的Format=xml需改为小写的format=xml。大写参数名会被API忽略,导致返回默认的HTML格式。
  2. 请求头未明确指定接受XML:浏览器会自动发送合适的Accept请求头告知服务器需要XML,而WebClient默认请求头未明确该要求,服务器因此返回HTML。
  3. 未对标题参数做URL编码:直接拼接textBox1.Text到URL中,若输入包含空格、特殊字符会导致URL格式错误,可能触发服务器返回错误页面(HTML)。

修正后的代码

private void button1_Click_1(object sender, EventArgs e)
{
    var webclient = new WebClient();
    // 设置请求头,明确要求XML格式
    webclient.Headers.Add(HttpRequestHeader.Accept, "application/xml");
    
    // 对标题参数进行URL编码,处理特殊字符
    string encodedTitle = Uri.EscapeDataString(textBox1.Text);
    string apiUrl = $"http://id.wikipedia.org/w/api.php?format=xml&action=query&prop=extracts&titles={encodedTitle}&redirects=true";
    
    try
    {
        var pageSourceCode = webclient.DownloadString(apiUrl);
        var doc = new XmlDocument();
        doc.LoadXml(pageSourceCode);
        
        var fnode = doc.GetElementsByTagName("extract")[0];
        string ss = fnode.InnerText;
        Regex regex = new Regex("\\<[^\\>]*\\>");
        ss = regex.Replace(ss, string.Empty);
        richTextBox1.Text = ss;
    }
    catch (Exception ex)
    {
        richTextBox1.Text = $"错误:{ex.Message}";
    }
}

关键修改点

  • 将Format=xml改为format=xml,符合API参数规范。
  • 添加Accept请求头,强制服务器返回XML内容。
  • 使用Uri.EscapeDataString对标题参数编码,避免特殊字符破坏URL结构。
  • 把异常捕获移到外层,覆盖整个API调用和XML解析流程,便于定位具体错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:55:24