Python 请求指纹识别?

问题描述 投票:0回答:1

我正在编写一个亚马逊 api,当仅使用 python 请求而不使用代理时,它会提示输入验证码。当通过 fiddler 路由这个 python 请求流量时,它似乎没有问题地通过。亚马逊是否有可能对 python 请求进行指纹识别,而 fiddler 由于它是代理而更改了指纹?

我查看了从 fiddler 和 python 请求发送的标头,它们是相同的。

fiddler 上没有设置额外的代理/fiddler 规则/过滤器来创建更改。

需要明确的是,所有提到的代理仅在本地完成,因此不会更改公共IP地址。

谢谢!

python api python-requests captcha fiddler
1个回答
2
投票

原因是网站正在使用 TLS hello 包对您的请求进行指纹识别。存在像

JA3
这样的库来为每个请求生成指纹。他们会故意阻止 http 客户端,例如
requests
urllib
。如果您使用 MITM 代理,因为代理服务器会与服务器创建新的 TLS 连接,因此服务器只能看到代理服务器的指纹,因此它们不会阻止它。

如果服务器仅阻止某些流行的http库,您只需更改TLS版本,那么您将拥有与默认指纹不同的指纹。

如果服务器仅允许流行的现实世界浏览器,并且仅接受它们作为有效请求,则您将需要可以模拟浏览器指纹的库,其中之一是curl-impersonate及其Python绑定curl_cffi

pip install curl_cffi
from curl_cffi import requests

# Notice the impersonate parameter
r = requests.get("https://tls.browserleaks.com/json", impersonate="chrome110")

print(r.json())
# output: {'ja3_hash': '53ff64ddf993ca882b70e1c82af5da49'
# the fingerprint should be the same as target browser
© www.soinside.com 2019 - 2024. All rights reserved.