调用API遭Cloudflare拦截,如何用VB.NET/C#模拟Chrome请求?
问题
我希望从服务器加载JSON内容,请求URL为:https://www.astrobin.com/api/v2/equipment/camera/?format=json。在Google Chrome浏览器中发起该请求可正常获取结果并完成解析;但使用VB.NET(代码如下)或C#执行相同请求时,会被Cloudflare拦截。请问是否有办法模拟Chrome的请求方式来执行查询?
我使用的VB.NET代码:
Using MyHTTPClient As New System.Net.Http.HttpClient Dim request As System.Net.Http.HttpRequestMessage = New System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Get, URL) response = MyHTTPClient.Send(request) responsereader = New System.IO.StreamReader(response.Content.ReadAsStream()) Answer = responsereader.ReadToEnd End Using
解决方案
Cloudflare拦截请求的核心原因是代码发送的请求头和Chrome浏览器差异过大,被识别为非人类请求。你需要模拟Chrome的关键请求头,最核心的是User-Agent,补充其他常见头还能进一步提升请求真实性。
- 先获取Chrome当前的User-Agent:打开Chrome,地址栏输入
chrome://version/,复制页面中的User-Agent字符串。 - 修改代码,给请求添加必要的请求头:
修改后的VB.NET代码示例:
Using MyHTTPClient As New System.Net.Http.HttpClient ' 模拟Chrome的核心请求头 MyHTTPClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36") MyHTTPClient.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8") MyHTTPClient.DefaultRequestHeaders.Add("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3") MyHTTPClient.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br") MyHTTPClient.DefaultRequestHeaders.Add("Connection", "keep-alive") MyHTTPClient.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1") Dim request As New System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Get, "https://www.astrobin.com/api/v2/equipment/camera/?format=json") Dim response = MyHTTPClient.Send(request) response.EnsureSuccessStatusCode() ' 确保请求返回成功状态 Using responsereader As New System.IO.StreamReader(response.Content.ReadAsStream()) Dim Answer = responsereader.ReadToEnd ' 此处处理返回的JSON内容 End Using End Using
注意事项:
- User-Agent要和你当前Chrome的版本保持一致,避免使用过时的字符串。
- 如果仍被拦截,可能需要处理Cloudflare的Cookie验证,这时可以考虑用Selenium这类带浏览器内核的库直接操控Chrome发起请求,但这种方式效率较低,适合小批量请求。
- 不要频繁发送请求,避免触发Cloudflare的频率限制。
内容的提问来源于stack exchange,提问作者Martin Weiß
相关产品推荐
相关产品推荐

