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

在ASP中用C#获取网页内容填充多行文本框遇问题求助

解决HTTPS URL抓取的两个常见问题

看起来你遇到了网页抓取时的两个典型问题,我来帮你逐个梳理解决:

错误1:找不到本地文件(如C:\Program Files\IIS Express\www.justdial.com)

这个问题的根源非常直观——当你输入的URL没有带上http://或https://前缀时,WebRequest.Create()会默认把它当成本地文件路径处理,而不是网络地址。比如你直接输入www.justdial.com,程序就会去你的IIS Express目录下找这个“文件”,自然会提示找不到。

解决办法:在创建请求前先校验URL格式,自动补充协议前缀:

string url = urltxt.Text.Trim();
// 检查并补充HTTPS前缀(也可根据需求换成HTTP)
if (!url.StartsWith("http://", StringComparison.OrdinalIgnoreCase) && !url.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
{
    url = "https://" + url;
}
WebRequest request = WebRequest.Create(url);

错误2:403 Forbidden(服务器拒绝请求)

很多网站会拦截看起来像“非浏览器发起”的请求——你的代码发送的请求没有携带浏览器常用的请求头,服务器识别出这不是正常用户操作,就会返回403禁止访问。

解决办法:给WebRequest添加模拟浏览器的请求头,让请求更“合规”:

// 添加Chrome浏览器的User-Agent,让服务器认为是浏览器请求
request.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36");
// 补充其他常见请求头,进一步模拟浏览器行为
request.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
request.Headers.Add("Accept-Language", "en-US,en;q=0.5");

修改后的完整代码

我还优化了资源释放逻辑(用using自动管理WebResponse等可释放资源),并添加了异常捕获方便调试:

string url = urltxt.Text.Trim();
// 确保URL带有协议前缀
if (!url.StartsWith("http://", StringComparison.OrdinalIgnoreCase) && !url.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
{
    url = "https://" + url;
}

try
{
    WebRequest request = WebRequest.Create(url);
    // 添加浏览器请求头,避免403拦截
    request.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36");
    request.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
    request.Headers.Add("Accept-Language", "en-US,en;q=0.5");

    // 使用using自动释放WebResponse资源
    using (WebResponse response = request.GetResponse())
    {
        using (Stream data = response.GetResponseStream())
        {
            string html = String.Empty;
            using (StreamReader sr = new StreamReader(data))
            {
                html = sr.ReadToEnd();
            }

            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(html);
            var htmlBody = htmlDoc.DocumentNode.SelectSingleNode("//body");
            if (htmlBody != null)
            {
                valuetxt.Text = htmlBody.InnerText;
            }
            else
            {
                valuetxt.Text = "未找到页面body内容";
            }
        }
    }
}
catch (WebException ex)
{
    // 捕获网络异常并显示详细信息
    valuetxt.Text = $"请求出错:{ex.Message}";
    if (ex.Response != null)
    {
        using (var errorResponse = (HttpWebResponse)ex.Response)
        {
            valuetxt.Text += $",HTTP状态码:{(int)errorResponse.StatusCode} {errorResponse.StatusDescription}";
        }
    }
}
catch (Exception ex)
{
    valuetxt.Text = $"未知错误:{ex.Message}";
}

额外提醒

  • 确保你已经通过NuGet安装了HtmlAgilityPack包(代码中用到的HtmlDocument来自这个库);
  • 部分网站可能有更严格的反爬机制(如验证码、Cookie验证),如果遇到这类情况,可能需要额外处理会话或使用无头浏览器工具,但上面的修改已经能解决大部分常见的403和URL格式问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:20:47