mirror of
https://github.com/lwthiker/curl-impersonate.git
synced 2025-08-09 13:19:37 +00:00

* Change the default HTTP/2 settings sent by Curl to match the ones that Chrome sends. They appear in the SETTINGS message in the beginning of the HTTP/2 handshake, which can be seen only after decrypting the TLS traffic. * Change the order of the HTTP/2 pseudo-headers ":authority", ":scheme" and ":path" in the HEADERS message. Curl sent them in a different order than Chrome.
41 lines
1.8 KiB
Bash
Executable File
41 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Find the directory of this script
|
|
dir=`echo "$0" | sed 's%/[^/]*$%%'`
|
|
|
|
PIPE=/tmp/curl-pipe
|
|
|
|
rm -f "$PIPE" && mkfifo "$PIPE"
|
|
exec 5<>"$PIPE" 3>"$PIPE" 4<"$PIPE" 5>&-
|
|
|
|
# The list of ciphers can be obtained by looking at the Client Hello message in
|
|
# Wireshark, then converting it using this reference
|
|
# https://wiki.mozilla.org/Security/Cipher_Suites
|
|
"$dir/curl-impersonate-ch" \
|
|
--ciphers TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,ECDHE-ECDSA-AES128-GCM-SHA256,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-ECDSA-AES256-GCM-SHA384,ECDHE-RSA-AES256-GCM-SHA384,ECDHE-ECDSA-CHACHA20-POLY1305,ECDHE-RSA-CHACHA20-POLY1305,ECDHE-RSA-AES128-SHA,ECDHE-RSA-AES256-SHA,AES128-GCM-SHA256,AES256-GCM-SHA384,AES128-SHA,AES256-SHA \
|
|
-H 'sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"' \
|
|
-H 'sec-ch-ua-mobile: ?0' \
|
|
-H 'sec-ch-ua-platform: "Windows"' \
|
|
-H 'Upgrade-Insecure-Requests: 1' \
|
|
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36' \
|
|
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' \
|
|
-H 'Sec-Fetch-Site: none' \
|
|
-H 'Sec-Fetch-Mode: navigate' \
|
|
-H 'Sec-Fetch-User: ?1' \
|
|
-H 'Sec-Fetch-Dest: document' \
|
|
-H 'Accept-Encoding: gzip, deflate, br' \
|
|
-H 'Accept-Language: en-US,en;q=0.9' \
|
|
--http2 --false-start --tlsv1.2 \
|
|
$@ >&3
|
|
|
|
exec 3>&-
|
|
|
|
IFS= read -d '' -r -n 2 -u 4 header
|
|
|
|
# Due to the "Accept-Encoding: gzip" header, we may receive a gzipped file.
|
|
if [ "$(echo -n $header | xxd -l 2 -p)" == "1f8b" ]; then
|
|
(printf "%s" "$header"; cat <&4) | gzip -cd;
|
|
else
|
|
printf "%s" "$header"; cat <&4;
|
|
fi
|