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::impit::Impit;
use impit::emulation::Browser;
#[tokio::main]
async fn main() {
let mut impit = Impit::builder()
.with_browser(Browser::Firefox)
.with_http3()
.build();
let response = impit.get(String::from("https://example.com"), None).await;
match response {
Ok(response) => {
println!("{}", response.text().await.unwrap());
}
Err(e) => {
println!("{:#?}", e);
}
}
}
If you are looking for a command-line tool that allows you to make requests to websites, check out the impit-cli
project.
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 instance
const impit = new Impit({
browser: "Chrome", // or "Firefox"
proxyUrl: "http://localhost:8080",
ignoreTlsErrors: true,
});
// Use the `fetch` method as you would with the built-in `fetch` function
const response = await impit.fetch("https://example.com");
console.log(response.status);
console.log(response.headers);
console.log(await response.text());
// console.log(await response.json());
// ...
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.