Skip to main content

wreq-js

A modern, actively maintained HTTP client that makes your scripts behave like real browsers on the network layer.

Native Performance

No process spawning or browser overhead. Native speed via Rust bindings.

Real Browser Fingerprints

Authentic TLS (JA3/JA4) and HTTP/2 fingerprints from Chrome, Firefox, Safari, and more.

Drop-in Fetch API

A fetch-like API with extra options for browser profiles and sessions.

WebSocket Support

Full WebSocket support with consistent browser fingerprinting.

Why wreq-js?

Standard HTTP clients like axios, fetch, got, and curl don’t behave like browsers on the network layer. They differ in:
  • TLS handshake: cipher suite order and extension sets
  • HTTP/2 frames: SETTINGS and PRIORITY behavior
  • Header ordering: the order headers are sent on the wire
Some anti-bot and fraud systems use these signals to flag non-browser clients. wreq-js reproduces browser networking behavior using the wreq Rust engine underneath. Your job is to write scripts. wreq-js handles the network-level impersonation.

When to use wreq-js

  • Web scraping and data collection
  • API automation with stealth requirements
  • High-throughput HTTP requests
  • Login flows and session management
  • Proxy rotation scenarios
  • DOM or JavaScript execution (not a browser runtime)
  • CAPTCHA solving or page automation
  • Full browser automation (use Playwright/Puppeteer instead)

Quick Example

If your script makes more than one request, start with a session and reuse it. Sessions reuse cookies and connection state, and are usually much faster than repeated one-off fetch() calls.
import { fetch } from 'wreq-js';

const response = await fetch('https://example.com/api', {
  browser: 'chrome_142',
  os: 'windows',
});

console.log(await response.json());
That is it. You get browser impersonation with a familiar, fetch-like API.

Next Steps