mirror of
https://github.com/lwthiker/curl-impersonate.git
synced 2026-08-25 17:18:13 +00:00
Add automated testing infrastructure with tests verifying that `curl-impersonate` has the same TLS signature as that of the impersonated browser. Each wrapper script (e.g. curl_chrome98) is launched to wikipedia.org while a packet capture is running in the background. The Client Hello is extracted from the capture, parsed and then compared to the known browser signature. The known signatures are stored in a YAML database.
The tests verify that curl-impersonate has the same network signature as that of the supported browsers. They do not test curl's functionality itself.
Running the tests
The tests assume that you've built both curl-impersonate-chrome and curl-impersonate-ff docker images before (see Installation).
To run the tests, build with:
docker build -t curl-impersonate-tests tests/
then run with:
docker run --rm curl-impersonate-tests
This simply runs pytest in the container. You can pass additional flags to pytest such as --log-cli-level DEBUG.
How the tests work
For each supported browser, a packet capture is started while curl-impersonate is run with the relevant wrapper script. The Client Hello message is extracted from the capture, and compared against the known signature of the browser.
What's missing
The following tests are still missing:
- Test that
curl-impersonatesends the HTTP headers in the same order as the browser. - Test that
curl-impersonatesends the HTTP/2 pseudo-headers in the same order as the browser. - Test that
curl-impersonatesends the same HTTP/2 SETTINGS as the browser.