HttpClient默认自动重定向但无法处理JS跳转和meta refresh,需手动关闭AllowAutoRedirect并解析Location头或meta标签;中文乱码因未按网页charset解码,应读字节数组后依响应头或meta指定编码;必须设置User-Agent防403;异步调用须await避免UI阻塞;HttpClient实例应复用。

HttpClient 默认不处理重定向,页面跳转后拿不到最终 HTML
很多情况下用 HttpClient 直接 GetAsync 拿到的不是你浏览器里看到的页面源码,而是 301/302 跳转前的响应体,甚至空内容。这是因为 HttpClient 默认开启自动重定向(AllowAutoRedirect = true),但某些网站会用 JavaScript 跳转、或在响应头里藏了 Location 却没触发重定向(比如返回 200 + meta refresh),这时你得自己判断。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 先关掉自动重定向:
new HttpClient(new HttpClientHandler { AllowAutoRedirect = false }),手动检查response.StatusCode和response.Headers.Location - 遇到 301/302 且有
Location头,再发一次请求;注意有些站点 Location 是相对路径,需用response.RequestMessage.RequestUri拼接 - 如果页面靠
<meta http-equiv="refresh">跳转,HttpClient不会执行它——你只能拿到原始 HTML 后自己解析 meta 标签再跟进
中文乱码常见于 Content-Type 缺少 charset 或服务器没声明编码
拿到的 HTML 字符串出现 或方块,大概率不是解码错了,而是压根没按网页声明的编码去读。比如网页 <meta charset="gb2312">锛



















