为何调用维基百科API返回HTML而非XML内容?
解决维基百科API返回HTML而非XML的问题
问题原因
- API参数大小写错误:维基百科API的参数名区分大小写,你使用的
Format=xml需改为小写的format=xml。大写参数名会被API忽略,导致返回默认的HTML格式。 - 请求头未明确指定接受XML:浏览器会自动发送合适的
Accept请求头告知服务器需要XML,而WebClient默认请求头未明确该要求,服务器因此返回HTML。 - 未对标题参数做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
相关产品推荐
相关产品推荐

