requests, Go’s net/http and Node’s fetch each have a handshake of their own, and bot protection knows all three. This page builds a client whose handshake is Chrome’s.
Create the client
One constructor call sets everything the site fingerprints at connection time. Build it once per session and pass it around.pip install git+https://github.com/Nintendocustom/Python-Tls-Client.git and downloads the shared library it wraps on first use, so it keeps up with new Chrome profiles without a package release.
Send headers in the browser’s order
Chrome sends headers in a fixed order that differs between a page load, a script load and a post from a script. Most HTTP libraries reorder headers silently; these clients let you pin the order, and you should on every request. The order comes from your powhttp recording, never from memory or from a guide.:method, :authority, :scheme, :path, and the line above pins it. Python and Node set that order for you.
Choose a proxy
The site ties its cookies to the IP that earned them. Change IP mid-session and every cookie you hold is worthless.- Sticky, not rotating. The proxy must keep one IP for as long as you ask. Start a new proxy session when you start a new browsing session, not partway through one.
- Residential, not datacenter. Addresses from consumer internet providers score well; datacenter ranges score badly regardless of what you send.
- Region matches the site and the headers. Pick a proxy in the site’s home market and set
Accept-Languageto match. A US proxy withen-US,en;q=0.9is the usual pairing, and thelanguageyou send Roolink should name the same language; a tag or the full header value both work.
https://api.ipify.org through the client twice, a minute apart. Same IP both times, and not your own.
One client per identity
A browser is one thing: one User-Agent, one handshake, one IP, one set of cookies. Keep that true in your code.- Create a client per session and never share a cookie jar between sessions.
- Send the same User-Agent to the site and to Roolink, and keep the
sec-ch-ua*headers in agreement with it. Supported browsers has the details. - Release the client when the session ends. In Node call
destroySession()on the session client andterminate()on the module client at shutdown; in Python callsite.close(); in Go let the client go out of scope.