“拒绝访问 | <url> 使用 Cloudflare 限制访问” GET 请求 Postman

Posted

技术标签:

【中文标题】“拒绝访问 | <url> 使用 Cloudflare 限制访问” GET 请求 Postman【英文标题】:"Access denied | <url> used Cloudflare to restrict access" GET request Postman 【发布时间】:2020-07-20 05:08:19 【问题描述】:

我目前正在使用 Postman 测试 GET 请求。我只是想看看我能得到什么样的信息。大多数情况下,只需插入网站的网址即可。但是,有一个特定的网站给我带来了麻烦。当我尝试发起 GET 请求时,出现以下错误:

<title>Access denied | <url> used Cloudflare to restrict access</title>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
<meta name="robots" content="noindex, nofollow" />
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" />
<link rel="stylesheet" id="cf_styles-css" href="/cdn-cgi/styles/cf.errors.css" type="text/css"
    media="screen,projection" />
<!--[if lt IE 9]><link rel="stylesheet" id='cf_styles-ie-css' href="/cdn-cgi/styles/cf.errors.ie.css" type="text/css" media="screen,projection" /><![endif]-->

直接在 Chrome 中启动时,该网站运行良好。但是,每次我尝试在 Postman 中发送 GET 时,都会收到 403 响应。我已经尝试了一些解决方案:

复制并粘贴显示在 Chrome Inspect 工具(Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36)中的用户代理。李> 设置状态为“INTERCEPTOR CONNECTED”的 Postman 拦截器系统。还在我的 Chrome 扩展程序中安装了该插件。 为网站启用 cookie。

无论如何,如果我遗漏了一些明显的问题,或者您需要更多信息,请联系我们!我尽量不分享该网站的直接链接,但如果没有其他方法,我会分享。

【问题讨论】:

【参考方案1】:

该网站使用Cloudflare,这是一种安全和内容交付产品。

使用 Cloudflare 时,网站的所有流量都会首先通过 Cloudflare,并在其中进行各种安全检查。这是一个行业领先的系统,具有许多复杂的检查,其中大部分可以由客户针对他们的特定网站进行配置。它有助于防止网站上的恶意机器人和攻击等事情。

403 error 表示您已被阻止访问该资源。这可能是因为 Cloudflare 的防火墙已确定来自 Postman 的请求是恶意的或不需要的,因此它阻止了您。当您在浏览器中访问该网站时,该网站运行良好,因为这被视为“正常”请求。

【讨论】:

但是有没有绕过它。我基本上是在尝试抓取一个 wordpress 页面并且经常被拒绝访问。我使用美丽的汤,添加标题只会触发验证码。有什么解决方法吗? @SuryaPalaniswamy 如果您试图抓取某人的网站,这可能正是他们想要使用 Cloudflare 拒绝您的原因。【参考方案2】:

使用此代码模拟浏览器,

header = 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'

【讨论】:

您应该解释一下为什么更改用户代理会有所帮助,以及您设置的用户代理是什么。 developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent User-Agent 请求标头是一个特征字符串,可让服务器和网络对等方识别请求用户代理的应用程序、操作系统、供应商和/或版本。 这不行,cloudflare 保护不是那么容易通过使用自定义标头来绕过【参考方案3】:

在抓取受 CloudFlare 保护的网站时,您需要执行以下操作:

    确保您发送的标头与浏览器发送的标头相同(并且顺序相同) 确保您使用的是非数据中心 IP 地址范围 如果它仍然不起作用,就像我的情况一样......

我在抓取一个电子商务网站(guess dot com)时遇到了同样的问题。更改标题顺序并没有为我解决。我的结论:显然,CloudFlare 分析请求的 TLS 指纹并抛出 403 (1020) 代码,以防指纹与通常用于抓取的 node.js/python/curl 匹配。解决方案是模拟一些流行浏览器的指纹 - 最明显的方法是使用 Puppeteer.js 和 puppeteer 额外的隐形插件。但是..由于 Puppeteer 对我的用例来说不够快(我说得委婉些.. Puppeteer 在资源和迟缓方面很疯狂)我不得不构建一个使用无聊SSL(Chrome 使用的 SSL 库)的实用程序 - 因为编译 C/C++ 代码并找出某些 TLS 库的隐蔽编译错误对于大多数 Web 开发人员来说并不有趣 - 我将其包装为 API 服务器,您可以在这里尝试:https://rapidapi.com/restyler/api/scrapeninja

详细了解 CloudFlare 如何分析 TLS: https://blog.cloudflare.com/monsters-in-the-middleboxes/

【讨论】:

以上是关于“拒绝访问 | <url> 使用 Cloudflare 限制访问” GET 请求 Postman的主要内容,如果未能解决你的问题,请参考以下文章