requests, Node fetch/axios, Go net/http — has a fingerprint
(JA3/JA4) that no real browser or app produces, so the request is flagged even with a valid
sensor. The sensor and the TLS fingerprint have to tell the same story.
Match the fingerprint to the product
Akamai Web
Impersonate a recent Chrome desktop. The web sensor models a browser, so your TLS and headers
must look like that browser.
Akamai BMP (mobile)
Impersonate the Android OkHttp client. The mobile sensor models the SDK, so a Chrome
fingerprint here is a mismatch.
Libraries
Use an HTTP client that lets you set the TLS fingerprint:
Use the newest Chrome profile your library ships for Web, and an OkHttp Android profile for
BMP.
Akamai Web — Chrome
Generate the sensor, then send your own request with a Chrome fingerprint, through your proxy:Akamai BMP — OkHttp
The target here is a mobile API, so impersonate the app’s OkHttp client:Python (tls-client)
The BMP sensor is not tied to an IP, so you can send it from any proxy. What has to match is the
OkHttp/Android fingerprint plus the app’s own headers and User-Agent.
Pin the header order
Akamai reads the order of your headers, not just their values. Send them in the exact order the real browser (Web) or app (BMP) uses.tls-client exposes header_order; curl_cffi keeps the
order of the dict you pass. Base the order on a real capture of Chrome or the app.
Proxy
- Web: generate the sensor and send the request from the same clean session and IP. Use a
sticky residential proxy and keep the region and
Accept-Languageconsistent with that IP. - BMP: any proxy works (IP-independent), but a residential IP in the app’s expected region is still the safest choice.
One client per identity
Keep one cookie jar, User-Agent and proxy per logical session. Don’t share a cookie jar across IPs, and tear sessions down cleanly at shutdown.Verify your fingerprint
Point your client at a JA3/JA4 echo service — for examplehttps://tls.peet.ws/api/all — and confirm
the fingerprint matches the Chrome or OkHttp profile you intended, before you spend time debugging
anything on the target side.