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

使用WebClient DownloadString获取网页返回400 Bad Request错误如何解决

问题原因及解决方案

1. 核心错误原因

你在GET请求中添加了Content-Type: application/json;charset=UTF-8请求头,这个头仅用于POST/PUT等携带请求体的请求,用来告知服务器请求体的内容格式。GET请求本身没有请求体,添加这个头会触发服务端参数校验失败,直接返回400错误,直接删除该头即可解决问题。

2. URL中#符号无需转义

#及后续内容属于浏览器端哈希路由,仅用于前端页面路由跳转,不会被发送到服务端,服务端实际接收的请求地址为https://saleslink.aa.com/en-US/,不需要做额外转义处理。

注意:该站点是单页应用,页面核心内容由前端动态渲染,直接请求拿到的初始HTML中不会包含渲染完成的业务数据,如果后续解析不到目标内容,需要改用Puppeteer Sharp等无头浏览器工具渲染页面后再提取内容。

3. 修复后的可用代码示例

基于WebClient的修复版本

using (WebClient client = new WebClient())
{
    client.Headers.Add("Accept-Language", "en-US");
    client.Headers.Add("Accept", "text/html, application/xhtml+xml, */*");
    // 替换为新版浏览器UA,避免服务端拦截旧版本IE标识
    client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36");
    string html = client.DownloadString("https://saleslink.aa.com/en-US/");
}

基于HtmlAgilityPack的修复版本

HtmlWeb web = new HtmlWeb();
web.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36";
HtmlDocument doc = web.Load("https://saleslink.aa.com/en-US/");

更推荐的HttpClient实现(WebClient已被官方标记为过时)

// HttpClient建议全局单例初始化,不要每次请求都释放
private static readonly HttpClient _httpClient = new HttpClient();

// 请求逻辑
_httpClient.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-US");
_httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36");
string html = await _httpClient.GetStringAsync("https://saleslink.aa.com/en-US/");

// 后续用HtmlAgilityPack解析
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 07:36:01