即使我提供了 cf_clearance cookie,Cloudflare 如何检测到我是机器人?

Anm*_*Anm 15 python cookies session-cookies cloudflare python-requests

即使我在发出正常请求时提供了所有数据、cookie 和参数,Cloudflare 如何知道该请求来自脚本?它检查什么?难道我做错了什么?例如(我已经编辑了一些值):

import requests

cookies = {
    '__Host-next-auth.csrf-token': '...',
    'cf_clearance': '...',
    'oai-asdf-ugss': '...',
    'oai-asdf-gsspc': '...',
    'intercom-id-dgkjq2bp': '...',
    'intercom-session-dgkjq2bp': '',
    'intercom-device-id-dgkjq2bp': '...',
    '_cfuvid': '...',
    '__Secure-next-auth.callback-url': '...',
    'cf_clearance': '...',
    '__cf_bm': '...',
    '__Secure-next-auth.session-token': '...',
}

headers = {
    'authority': 'chat.openai.com',
    'accept': 'text/event-stream',
    'accept-language': 'en-IN,en-US;q=0.9,en;q=0.8',
    'authorization': 'Bearer ...',
    'content-type': 'application/json',
    'cookie': '__Host-next-auth.csrf-token=...',
    'origin': 'https://chat.openai.com',
    'referer': 'https://chat.openai.com/chat',
    'sec-ch-ua': '"Brave";v="111", "Not(A:Brand";v="8", "Chromium";v="111"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Linux"',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    'sec-gpc': '1',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
}

json_data = {
 ...
}

response = requests.post('https://chat.openai.com/backend-api/conversation', cookies=cookies, headers=headers, json=json_data)
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的用户代理但无济于事,但我似乎无法弄清楚是什么导致了问题。

返回的响应包含错误代码403和 HTML,如下所示:

<html>
...
...
<h1>Access denied</h1>
  <p>You do not have access to chat.openai.com.</p><p>The site owner may have set restrictions that prevent you from accessing the site.</p>
  <ul class="cferror_details">
    <li>Ray ID: ...</li>
    <li>Timestamp: ...</li>
    <li>Your IP address: ...</li>
    <li class="XXX_no_wrap_overflow_hidden">Requested URL: chat.openai.com/backend-api/conversation </li>
    <li>Error reference number: ...</li>
    <li>Server ID: ...</li>
    <li>User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36</li>
  </ul>
...
...
</html>
Run Code Online (Sandbox Code Playgroud)

Sti*_*ack 4

我曾经管理过一个网络数据抓取/挖掘团队,每天必须抓取大约 2 万个网站以获取公开数据。我们能够可靠地通过一些更难的机器人检查(reCAPTCHA、Cloudflare 以及十几个或更多 AI/ ML驱动的其他检查)的唯一方法是使用使我们的流量看起来像人类用户流量的代理,或者以编程方式远程控制浏览器,有时甚至同时远程控制两者。

\n

代理提供商似乎每隔几年就会来来去去,而我最后使用的代理提供商已不再存在,但看起来有一些代理提供商可以保证“启动”您的请求的类似体验,使它们看起来像合法流量。这对于某些使用当前流量分析和历史数据来确定您是否是机器人的机器人检测(特别是 reCAPTCHA,但也可能是 Cloudflare)是必要的。这些代理都不是免费的,但只要您不需要每天发出 300K 请求,它们应该相对便宜。

\n

远程控制选项是一个在其上运行浏览器的容器映像,以及一个基于 Python 的远程控制包*,该包将像键盘和鼠标一样与浏览器进行交互。这对于击败/避免对浏览器进行指纹识别和/或观察行为的机器人检测非常重要。您的浏览器通过 JavaScript 放弃了相当数量的属性,如果您不只是使用常规浏览器,您一定会忘记其中一个属性。这些属性会被检查是否有任何“Bot”标志,以及您访问页面时的速度和点击内容,以确定您是否是人类。

\n

* 使用 PyAutoGui、PyScreeze 进行屏幕截图,使用 pyTesseract 对屏幕截图进行OCR 。Selenium / WebDriver可以被更先进的机器人检测软件检测到,因此屏幕截图 + OCR 用于收集数据和定位可点击内容。

\n