hyper.rs with boringssl configured to impersonate chrome

Overview

boringhyper

Impersonate chrome BoringSSL JA3 fingerprint to pass request sent using Rustโ„ขยฎ ( ๐Ÿฆ€ ๐Ÿš€ ) through Cloudflare and Akamai.
Live in harmony with nature and don't waste more valuable energy on running headless browser to bypass simple thing!

Symptoms of website using JA3 fingerprint that this repo can help solve:

  • returns 403 and requires you to pass js/captcha challenge when requested programmatically even with same headers as browser
  • page when visited first time from modern browser loads instantly without "Checking your browser" WAF.

Credits and resources

  • https://github.com/4JX/reqwest-impersonate - it is fork of reqwest, hyper and h2 which requires to be updated to upstream. Currently, in my case I can't even manage it to work due to different versions of hyper in project and, unfortunately, I can't keep it in sync with reqwest, hyper and h2 upstream. It is more advanced, and it also tries to impersonate chrome http2 fingerprint, but I think my composition of raw hyper and boring will be easier to maintain (basically no maintenance related to reqwest updates) and it is currently enough for my usage.
  • https://scrapfly.io/web-scraping-tools/ja3-fingerprint - easily compare ja3 fingerprint without struggling with wireshark

Usage

use boringhyper::ChromeHeadersExt;
use hyper::{Body, Request};

async fn visit_cf() {
    const ENTERPRISE_CF_URL: &str = "https://www.canva.com/pl_pl/";

    let client = boringhyper::create_client();
    let req = Request::builder()
        .uri(ENTERPRISE_CF_URL)
        .with_chrome_headers()
        .body(Body::empty())
        .unwrap();
    let mut resp = client.request(req).await.expect("Could not do request");
    assert_eq!(resp.status(), 200);
    // Since WAF requires header "accept-encoding: gzip(, deflate, br)" to be sent,
    // `boringhyper` contains extension on hyper::Response to read body decompressed if 
    // server replied with compressed content.
    // See: `ReadBodyExt::read_body`.
    let body = resp.read_body().await.expect("Could not read body");
    let body_str = String::from_utf8_lossy(&body);
    println!("Response body: {body_str}");
}

true image also known as meme representing Virgin API Consumer struggling with rate limits, stale data, quota, api keys and chad third-party scraper that parses HTML using regex, scrapes so fast the backend crashes, can access any data he wants

You might also like...
Sincere is a micro web framework for Rust(stable) based on hyper and multithreading

The project is no longer maintained๏ผ Sincere Sincere is a micro web framework for Rust(stable) based on hyper and multithreading. Style like koa. The

Node.js http server framework powered by Hyper native binding.

hnsjs POC project. Install this test package yarn add @hnsjs/core Support matrix node10 node12 node14 node15 Windows x64 โœ“ โœ“ โœ“ โœ“ Windows x32 โœ“ โœ“ โœ“ โœ“

axum-server is a hyper server implementation designed to be used with axum framework.

axum-server axum-server is a hyper server implementation designed to be used with axum framework. Features Conveniently bind to any number of addresse

Ergonomic and modular web framework built with Tokio, Tower, and Hyper

axum axum is a web application framework that focuses on ergonomics and modularity. More information about this crate can be found in the crate docume

A synchronous HTTP server built on hyper.

Astra Astra is a synchronous HTTP server built on top of hyper. use astra::{Body, Response, Server}; fn main() { Server::bind("localhost:3000")

WasmEdge Hyper Demo.

WasmEdge Hyper Demo In this project, we demonstrate how to use hyper and tokio to build async http client in WebAssembly and execute it using WasmEdge

Rate Limiting middleware for Tower/Axum/Tonic/Hyper utilizing the governor crate

A Tower service and layer that provides a rate-limiting backend by governor. Based heavily on the work done for actix-governor. Works with Axum, Hyper

A simple API gateway written in Rust, using the Hyper and Reqwest libraries.

API Gateway A simple API gateway written in Rust, using the Hyper and Reqwest libraries. This gateway can be used to forward requests to different bac

Owner
makin
moze w kasynie spotkasz mnie ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณโ€๐Ÿ‘ฉ
makin
Minimal Substrate node configured for smart contracts via pallet-contracts.

substrate-contracts-node This repository contains Substrate's node-template configured to include Substrate's pallet-contracts โ€’ a smart contract modu

Parity Technologies 73 Dec 30, 2022
Librarian runs pre-configured commands against a group of files that match a set of filters

Filesystem Librarian Librarian runs pre-configured commands against a group of files that match a set of filters. The group of files is called a libra

Jason Rogena 10 Dec 25, 2022
Mundane is a Rust cryptography library backed by BoringSSL that is difficult to misuse, ergonomic, and performant (in that order).

Mundane Mundane is a Rust cryptography library backed by BoringSSL that is difficult to misuse, ergonomic, and performant (in that order). Issues and

Google 1.1k Jan 3, 2023
Mundane is a Rust cryptography library backed by BoringSSL that is difficult to misuse, ergonomic, and performant (in that order).

Mundane Mundane is a Rust cryptography library backed by BoringSSL that is difficult to misuse, ergonomic, and performant (in that order). Issues and

Google 1.1k Jan 3, 2023
A boringssl-based rustls crypto provider

boring-rustls-provider This is supposed to be the start to a boringssl-based rustls crypto provider. Status This is just a dump of me figuring out how

Jan 5 Nov 28, 2023
A CLI tool for getting screenshots of URLs using headless chrome

rustywitness ?? ?? ?? Web screenshot utility A CLI tool for getting screenshots of URLs using headless chrome Built with โค๏ธŽ by swanandx and contributo

Swanand Mulay 16 Jan 3, 2023
Get username & password from Chrome.

chrome_password Steal Get username & password from Chrome. (Now Only Windows) Installation You can download the exe binary from the releases page. Wit

่ฟทๆธก 38 Dec 4, 2022
A terminal-based password manager, generator, and importer/exporter (Firefox, Chrome) backed with a concurrent hashmap

rucksack A terminal-based password manager, generator, and importer/exporter (Firefox, Chrome) backed with a concurrent hashmap Features Password gene

null 6 Jan 18, 2023
Pass cloudflare IUAM using headless chrome without hassle.

FlarelessHeadlessChrome Pass cloudflare turnstile challenge using patched chrome binary (Windows/Linux x64). How it works Currently, with new headless

makin 3 Oct 24, 2023
A lightweight web framework built on hyper, implemented in Rust language.

Sapper Sapper, a lightweight web framework, written in Rust. Sapper focuses on ergonomic usage and rapid development. It can work with stable Rust. Sa

Daogang Tang 622 Oct 27, 2022