Skip to content

Repository files navigation

impit | browser impersonation made simple

impit is a rust library that allows you to impersonate a browser and make requests to websites. It is built on top of reqwest, rustls and tokio and supports HTTP/1.1, HTTP/2, and HTTP/3.

The library provides a simple API for making requests to websites, and it also allows you to customize the request headers, use proxies, custom timeouts and more.

use impit::cookie::Jar;use impit::{impit::Impit, fingerprint::database as fingerprints};#[tokio::main]asyncfnmain(){let impit = Impit::<Jar>::builder().with_fingerprint(fingerprints::firefox_144::fingerprint()).with_http3().build().unwrap();let response = impit
.get(String::from("https://example.com"),None,None).await;match response {Ok(response) => {println!("{}", response.text().await.unwrap());}Err(e) => {println!("{:#?}", e);}}}

Other projects

If you'd prefer to use impit from a Node.js application, check out the impit-node folder, or download the package from npm:

npm install impit

The interface is the same as the native fetch.

import{Impit}from'impit';// Set up the Impit instanceconstimpit=newImpit({browser: "chrome",// or "firefox"proxyUrl: "http://localhost:8080",ignoreTlsErrors: true,});// Use the `fetch` method as you would with the built-in `fetch` functionconstresponse=awaitimpit.fetch("https://example.com");console.log(response.status);console.log(response.headers);console.log(awaitresponse.text());// console.log(await response.json());// ...

Usage from Rust

Technically speaking, the impit project is a somewhat thin wrapper around reqwest that provides a more ergonomic API for making requests to websites. The real strength of impit is that it uses patched versions of rustls and other libraries that allow it to make browser-like requests.

Note that if you want to use this library in your rust project, you have to add the following dependencies to your Cargo.toml file:

[dependencies]
impit = { git="https://github.com/apify/impit.git", branch="master" }
[patch.crates-io]
rustls = { git="https://github.com/apify/rustls.git" }
h2 = { git="https://github.com/apify/h2.git" }

Without the patched dependencies, the project won't build.

Note that you also have to build your project with rustflags = "--cfg reqwest_unstable", otherwise, the build will also fail. This is because impit uses unstable features of reqwest (namely http3 support), which are not available in the stable version of the library.

About

impit | rust library for browser impersonation

Resources

Stars

566 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages