Commit Graph

180 Commits

Author SHA1 Message Date
lwthiker
31ed18d312 Change libbrotli compilation flags for macOS
macOS doesn't support the '-Bstatic' flag. Remove it as it is not really
needed (the linker will find the static libraries by their name).
2022-04-17 17:24:27 +03:00
lwthiker
f320cecdfd Ensure 'curl-impersonate' is compiled correctly
Add a few commands to the Dockerfile to check that 'curl-impersonate'
was compiled correctly: Check that it has brotli, http2 and tls support,
and check that the dependencies were compiled statically.

These are basic checks which are useful when modifying the Dockerfile:
Sometimes even small modifications cause curl to be compiled
incorrectly but without failing the build.
2022-04-17 17:23:20 +03:00
lwthiker
d7ed859ad0 Change nghttp2 link flags to support macOS
Previously '-l:nghttp2.a' was used to specify static linking with
nghttp2 and to stop the linker from linking dynamically with
libnghttp2.so. This way of linking is not supported on macOS. Instead,
add '--disable-shared' to prevent libnghttp2.so from even being
compiled. This way the linker will find the static library only and link
against it.
2022-04-17 17:01:15 +03:00
lwthiker
a6c4fa6ac1 Use $(MAKE) instead of 'make' in Makefile.in
To support platforms where 'make' is named differently (e.g. on MacOS we
use 'gmake' instead), replace it with '$(MAKE)' in Makefile.in
2022-04-17 14:50:53 +03:00
lwthiker
8afee95885 Merge pull request #49 from lwthiker/accept_encoding
Support encoded content in curl_easy_impersonate
2022-04-17 14:42:02 +03:00
lwthiker
922a8bb72e Support encoded content in curl_easy_impersonate
Set CURLOPT_ACCEPT_ENCODING to an empty string in
curl_easy_impersonate() to enable decompression of encoded responses
using all built-in compressions. This is similar to adding
'--compressed' in the command line curl and is necessary since
curl_easy_impersonate() adds the 'Accept-Encoding' header which may
cause the server to respond with compressed content.
2022-04-17 12:50:16 +03:00
lwthiker
22c6e96089 Update README.md
Try to fix GitHub Actions badges showing "no status"
2022-04-17 11:32:28 +03:00
lwthiker
a7127644af Merge pull request #47 from lwthiker/ldconfig_after_make_install
Update INSTALL.md
2022-04-17 10:51:14 +03:00
lwthiker
a79b14f5fc Update INSTALL.md
On some systems (Ubuntu), after doing 'make firefox-install' or 'make chrome-install', the linker can't find libcurl-impersonate.
Instruct users to run 'ldconfig' manually after installation to refresh the linker's cache, so it finds libcurl-impersonate in /usr/local/
2022-04-15 18:23:15 +03:00
lwthiker
4bd8671112 Update INSTALL.md 2022-04-15 17:52:37 +03:00
lwthiker
7717c220d1 Merge pull request #45 from lwthiker/makefile
Native build system using Makefile
2022-04-12 22:33:57 +03:00
lwthiker
842415f119 Add missing tests dependency in GitHub action 2022-04-12 22:21:13 +03:00
lwthiker
f1b31726dc Fix action failing on running pytest as sudo 2022-04-12 21:59:26 +03:00
lwthiker
e04e53b4d5 Use 'sudo' to launch pytest (because of tcpdump) 2022-04-12 17:32:29 +03:00
lwthiker
184fa640e8 Support Python 3.8 in the tests 2022-04-12 17:11:40 +03:00
lwthiker
f1324f7718 Add Badge for the native-build GitHub Action 2022-04-12 16:55:00 +03:00
lwthiker
48d18cd8cd Add GitHub Action to test native builds
Add a GitHub action to compile and test native builds using the new
Makefile-based build system. Currently runs on Ubuntu and in the future
will run similarly on MacOS.
2022-04-12 16:53:22 +03:00
lwthiker
f5467cec11 Use configurable tcpdump interface in the tests
And add support for capturing the Client Hello message when sent over
IPv6.
2022-04-12 16:51:51 +03:00
lwthiker
facd6e5551 Use configurable binaries directory in the tests
Locate curl-impersonate and libcurl-impersonate in a directory which is
configurable from the command line instead of looking for them in the
current directory. '--install-dir' is passed to pytest, where a 'bin'
and 'lib' directories are expected with (lib)curl-impersonate.

Rename the Actions file for the Docker build to allow the creation of
addition Action for native builds.
2022-04-12 16:50:24 +03:00
lwthiker
79f8601a30 Fix typo in Makefile.in 2022-04-12 12:43:02 +03:00
lwthiker
493576a15e Add INSTALL.md
Add INSTALL.md with explanation about using the new Makefile-based build
system and the Docker-based build system, and remove the same section
from README.md.
2022-04-12 12:29:47 +03:00
lwthiker
4e102d1fbf Add Makefile uninstall targets
Add two targets for uninstalling curl-impersonate to the Makefile.
2022-04-12 12:29:47 +03:00
lwthiker
7e19dd7221 Only install binaries in 'make install'
When doing 'make firefox-install' or 'make chrome-install' in our own
Makefile, only install curl's binaries (curl & libcurl) and do not
install the man pages and headers. This will prevent collision of these
files with any installed curl man pages or headers. In the future it
might be possible to rename the man pages or headers as well to allow
them live side-by-side with the vanilla curl.
2022-04-12 12:29:41 +03:00
lwthiker
b484701491 Use autoconf's srcdir variable in Makefile.in
Use autoconf's automatic variable 'abs_srcdir' to find the path to the
patch files and wrapper scripts, instead of relying on the Makefile's
directory. This allows doing out-of-tree builds, i.e. 'mkdir build && cd
build && ../configure && make'.
2022-04-12 11:32:50 +03:00
lwthiker
35623ee453 Use autoconf to configure the Makefile
Use a 'configure' script generated by autoconf to configure whether a
static build is desired, and where to install the final curl-impersonate
binaries. Add installation targets to the Makefile.
2022-04-12 10:58:53 +03:00
lwthiker
15fd7186ac Add Makefile to orchestrate native builds
Add a Makefile to orchestrate native builds of curl-impersonate without
Docker. The Makefile does not compile any program by itself but is just
used to build all the dependencies and then build curl itself with the
needed patches. It has a very similar flow to the Dockerfile.
2022-04-12 10:58:53 +03:00
lwthiker
319139e045 Merge pull request #43 from lwthiker/binary_name_change
Use different binary names for Firefox and Chrome
2022-04-12 10:57:19 +03:00
lwthiker
8ffeb3ca56 Change binary names as part of curl's build
Change the binary names of curl and libcurl as part of the curl build
process by patching curl's build scripts. When running 'make' in the
patched curl directory the resulting binaries will be already named
'curl-impersonate-ff' and 'curl-impersonate-chrome' (and the same for
libcurl), thus saving the need for manually renaming them after the
compilation. This also enables running 'make install' with curl's own
Makefiles in order to install curl-impersonate.
2022-04-11 17:59:51 +03:00
lwthiker
22508c6863 Use different binary names for Firefox and Chrome
Rename the binary files of curl-impersonate so that the Firefox and
Chrome versions can co-exist on the same system. The Firefox version is
now named 'curl-impersonate-ff' and 'libcurl-impersonate-ff' and the
Chrome version is named 'curl-impersonate-chrome' and
'libcurl-impersonate-chrome'. The wrapper scripts look for these names
as well. Symbolic names with the old names are still created inside the
Docker images to keep compatibility as much as possible.
2022-04-08 19:10:35 +03:00
lwthiker
af38d2b626 Merge pull request #35 from lwthiker/chrome_android
Add signature for Chrome 99 on Android
v0.3.2
2022-03-24 21:23:22 +02:00
lwthiker
584ff54653 Add signature for Chrome 99 on Android phone
Add support for impersonating Chrome 99 on Android 12 (Pixel 6 was
chosen as an arbitrary Android phone to impersonate). The TLS signature
for Chrome on Android is identical to Chrome on Windows. The difference
is in a few HTTP headers ('sec-ch-ua-mobile', 'sec-ch-ua-platform' and
'user-agent').
2022-03-24 21:01:47 +02:00
lwthiker
a3054994aa Merge pull request #29 from lwthiker/ff98
Impersonate Firefox 98
2022-03-12 10:57:37 +02:00
lwthiker
768e37d194 Impersonate Firefox 98
Add support for impersonating Firefox 98 released a few days ago. It has
the same TLS signature as Firefox 95 so the adaptation includes changing
the user-agent only. Upgrade the NSS version used to 3.75, even though
it's not strictly necessary.
2022-03-12 10:44:24 +02:00
lwthiker
0952bca3de Merge pull request #28 from lwthiker/alpine
Add Alpine Linux images and push automatically to DockerHub
v0.3.1
2022-03-10 14:44:33 +02:00
lwthiker
aba67a4cbe Fix typo and link in README.md v0.3.1-alpha.3 2022-03-10 13:38:37 +02:00
lwthiker
2cf96e9337 Update README.md with Alpine-based Docker images 2022-03-10 13:34:56 +02:00
lwthiker
ebc8032615 Add more tags to alpine-based Docker Hub images 2022-03-10 13:23:12 +02:00
lwthiker
4ea8f859eb Install nss in final alpine image
Add 'apk add nss' for the final alpine image of the Firefox version of
curl-impersonate. This is needed for curl to find the list of root
certificates.
2022-03-10 13:17:31 +02:00
lwthiker
2e738cd7d0 Push the Alpine image for Firefox version as well v0.3.1-alpha.2 2022-03-10 12:50:17 +02:00
lwthiker
21af00356e Add action to push alpine images to Docker Hub
Add a GitHub action to push alpine images with curl-impersonate to
Docker Hub whenever a new release tag is created.
v0.3.1-alpha.1
2022-03-10 12:22:27 +02:00
lwthiker
eaeb619fa7 Add Alpine Linux build system
Add Dockerfiles for building curl-impersonate on Alpine Linux.

The Dockerfile template file was modified to support Alpine Linux,
mainly by changing the dependency installation from 'apt' to 'apk'.
The resulting alpine images are small (~11mb) and will be uploaded to
Docker hub.
2022-03-10 11:57:53 +02:00
lwthiker
91c906febd Merge pull request #27 from lwthiker/template_dockerfile
Use a template for generating Dockerfiles
2022-03-10 10:24:43 +02:00
lwthiker
d1dbfc89c5 Use a template for generating Dockerfiles
Since the firefox and chrome builds are similar except for the TLS
library used, it makes sense to unify their Dockerfiles. This commit
introduces a template Dockerfile from which both the build Dockerfiles
are generated using the simple 'mustache' template system.
2022-03-09 11:01:44 +02:00
lwthiker
446ab75876 Merge pull request #25 from lwthiker/static_brotli
Compile libbrotli statically into curl-impersonate
2022-03-08 16:12:21 +02:00
lwthiker
7df69b5107 Compile libbrotli statically into curl-impersonate
Compile libbrotli statically into curl-impersonate/libcurl-impersonate
for convenience of usage outside the container.
2022-03-08 15:45:30 +02:00
lwthiker
253285a84f Update README.md
* Add a full list of supported browsers.
* Split "Usage" to "Basic usage" and "Advanced usage"
v0.3.0
2022-03-05 14:16:11 +02:00
lwthiker
ce95990620 Split GitHub Action cache to two directories
The GitHub Action workflow uses a cache to speed up the Docker builds.
However, it seems that it only partially works, saving only the Docker
layers for the Firefox build. This is an attempt to solve it by using
two separate cache paths, one for each build.
2022-03-05 13:30:14 +02:00
lwthiker
8468747057 Merge pull request #19 from lwthiker/fix_wrapper_scripts
Fix bug in wrapper scripts parameter passing
2022-03-05 13:17:46 +02:00
lwthiker
6e9b194dd2 Merge pull request #23 from lwthiker/chrome99
Impersonate Chrome 99 and Edge 99
2022-03-05 13:16:01 +02:00
lwthiker
e554958c75 Impersonate Chrome 99 and Edge 99
Add impersonation support for Chrome 99 and Edge 99 which were just released.
Their TLS signature is identical to the previous versions (98).
The only difference is in the user agents.

curl patch from
ca13947f00
2022-03-05 13:03:27 +02:00