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

C# WebBrowser如何在主窗口顶部展示HTTP响应状态码及网页标题 附代码求解释

实现C# WebBrowser顶部展示HTTP响应状态码与网页标题的方案

首先要调整窗口布局,以WinForm场景为例:

  • 在WebBrowser控件上方新增Panel或ToolStrip容器,放入两个Label控件分别用来展示状态码和网页标题
  • 状态码获取有两种可选方案:一是提前用HttpWebRequest发起请求拿到状态码后,再将返回的HTML内容通过WebBrowser.DocumentText赋值加载,这种方式实现简单适合普通场景;二是扩展WebBrowser的COM接口直接捕获控件自身请求的响应头,适合需要完全复用控件请求逻辑的场景
  • 网页标题可以直接在WebBrowser的DocumentCompleted事件触发后,读取WebBrowser.DocumentTitle属性获取

参考实现代码:

// 窗体中提前定义两个Label:lblStatusCode展示状态码,lblTitle展示网页标题
private async void NavigateToUrl(string url)
{
    try
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
        {
            // 顶部展示响应状态码
            lblStatusCode.Text = $"HTTP状态:{(int)response.StatusCode} {response.StatusDescription}";
            if (response.StatusCode == HttpStatusCode.OK)
            {
                StreamReader reader = new StreamReader(response.GetResponseStream(), 
                    Encoding.GetEncoding(response.CharacterSet ?? "UTF-8"));
                string htmlContent = reader.ReadToEnd();
                // 加载页面到WebBrowser控件
                webBrowser1.DocumentText = htmlContent;
                // 文档加载完成后读取并展示标题
                webBrowser1.DocumentCompleted += (s, e) =>
                {
                    lblTitle.Text = $"网页标题:{webBrowser1.DocumentTitle}";
                };
            }
        }
    }
    catch (WebException ex)
    {
        if (ex.Response is HttpWebResponse errResp)
        {
            lblStatusCode.Text = $"HTTP状态:{(int)errResp.StatusCode} {errResp.StatusDescription}";
        }
        else
        {
            lblStatusCode.Text = "HTTP状态:请求失败";
        }
    }
}

适用场景:自定义浏览器工具、网页可用性测试工具、爬虫可视化工具等需要直观展示页面加载状态的场景。


提供的C#代码解释

这段代码是基于HttpWebRequest实现HTTP GET请求、读取响应内容的基础示例,逐段逻辑说明如下:

// 定义目标请求的URL地址
string urlAddress = "http://google.com";
// 初始化HTTP请求实例
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
// 发起同步HTTP请求,获取服务端返回的响应对象
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

// 判断响应状态码是否为200 OK,即请求是否成功
if (response.StatusCode == HttpStatusCode.OK)
{
    // 获取响应内容的字节流
    Stream receiveStream = response.GetResponseStream();
    StreamReader readStream = null;

    // 判断响应头中是否指定了字符编码
    if (response.CharacterSet == null)
    {
        // 未指定编码则用系统默认编码创建流读取器
        readStream = new StreamReader(receiveStream);
    }
    else
    {
        // 按响应指定的编码创建流读取器,避免出现乱码
        readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
    }

    // 读取整个响应流的内容,得到完整的HTML字符串
    string data = readStream.ReadToEnd();

    // 手动关闭资源
    response.Close();
    readStream.Close();
}

这段代码的可优化点:

  • 没有异常捕获逻辑,出现404、500、请求超时等错误时会直接抛出异常
  • 资源释放不规范,应该用using语句自动释放资源,不需要手动调用Close方法
  • 是同步请求,会阻塞UI线程,桌面端项目建议替换为异步的GetResponseAsync方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:18:00