C# HttpClient请求Investing.com经济日历遇403禁止访问求助
解决403 Forbidden问题的方案
1. 添加浏览器请求头伪装
网站会通过请求头标识识别非浏览器请求,默认HttpClient的标识容易被拦截,先给请求添加模拟浏览器的请求头:
using System; using System.Net.Http; using System.Net.Http.Headers; namespace ConsoleApp3 { internal class Program { static void Main(string[] args) { using (var client = new HttpClient()) { // 模拟Chrome浏览器的请求头 client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"); client.DefaultRequestHeaders.Accept.ParseAdd("text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"); client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"); client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br"); client.DefaultRequestHeaders.Add("Connection", "keep-alive"); client.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1"); var endpoint = new Uri("https://www.investing.com/economic-calendar/"); var result = client.GetAsync(endpoint).Result; var content = result.Content.ReadAsStringAsync().Result; Console.WriteLine(content); } } } }
2. 处理Cloudflare JS验证挑战
如果上述方法仍返回403,说明网站启用了Cloudflare的人机验证(从返回HTML中的__CF$cv$params和JS脚本可判断),此时需要用能执行JavaScript的工具绕过验证,推荐使用PuppeteerSharp:
操作步骤:
- 通过NuGet安装PuppeteerSharp:
Install-Package PuppeteerSharp - 使用以下代码:
using System; using System.Threading.Tasks; using PuppeteerSharp; namespace ConsoleApp3 { internal class Program { static async Task Main(string[] args) { // 首次运行自动下载Chrome内核,后续可注释该行 await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultChromiumRevision); using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true, // 设为false可显示浏览器窗口调试 Args = new[] { "--no-sandbox", "--disable-setuid-sandbox" } })) using (var page = await browser.NewPageAsync()) { // 设置浏览器标识 await page.SetUserAgentAsync("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"); // 导航到目标页面,等待网络请求稳定 await page.GoToAsync("https://www.investing.com/economic-calendar/", new NavigationOptions { WaitUntil = new[] { WaitUntilNavigation.Networkidle2 } }); // 获取完整页面源码 var content = await page.GetContentAsync(); Console.WriteLine(content); } } } }
注意事项
- 频繁请求易触发拦截,建议添加请求间隔,避免被判定为爬虫
- 严格遵守网站的使用条款与
robots.txt规则,禁止过度爬取
内容的提问来源于stack exchange,提问作者Николай Борисов
相关产品推荐
相关产品推荐

