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...
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
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
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
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
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
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
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
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

null 94 Oct 26, 2022
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 โœ“ โœ“ โœ“ โœ“

LongYinan 18 Nov 23, 2022