Skip to content

Commit f81eae5

Browse files
Update README with SearchApi branding, fix references, and sync emulations
- Add SearchApi logo with dark/light theme support - Fix `rnet` reference to `wreq` (copy-paste from Python bindings) - Add missing emulation profiles: Chrome144/145, Edge143-145, Firefox147, Safari17_6 - Add Edge to tagline (16 emulation profiles were unlisted) - Add Installation section and Gem Version badge - Rename title to `wreq` (matches gem name), sections to "Browser Emulation" and "Contributing" - Clean up filler prose and update example to Chrome145 - Fix gemspec: homepage, summary, description, documentation_uri, duplicate rdoc_options - Fix Cargo.toml homepage to point to repo
1 parent d2d4a27 commit f81eae5

3 files changed

Lines changed: 53 additions & 28 deletions

File tree

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name = "wreq-ruby"
33
description = "Ruby bindings for Wreq, HTTP client library in Rust."
44
authors = ["SearchApi <support@searchapi.io>"]
5-
homepage = "https://github.com/SearchApi"
5+
homepage = "https://github.com/SearchApi/wreq-ruby"
66
repository = "https://github.com/SearchApi/wreq-ruby"
77
edition = "2024"
88
rust-version = "1.85"

README.md

Lines changed: 45 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
# wreq-ruby
1+
# wreq
22

3+
[![Gem Version](https://badge.fury.io/rb/wreq.svg)](https://rubygems.org/gems/wreq)
34
[![CI](https://github.com/SearchApi/wreq-ruby/actions/workflows/ci.yml/badge.svg)](https://github.com/SearchApi/wreq-ruby/actions/workflows/ci.yml)
45

5-
An easy and powerful Ruby HTTP client with advanced browser fingerprinting that accurately emulates **Chrome**, **Firefox**, **Safari**, **Opera**, and **OkHttp**, with precise **TLS/HTTP2** signatures, and powered by [wreq](https://github.com/0x676e67/wreq).
6-
6+
An easy and powerful Ruby HTTP client with browser fingerprinting. Emulates **Chrome**, **Edge**, **Firefox**, **Safari**, **Opera**, and **OkHttp** with precise TLS/HTTP2 signatures, powered by [wreq](https://github.com/0x676e67/wreq).
77

88
## Features
99

10-
- Plain bodies, JSON, urlencoded,
10+
- Plain bodies, JSON, urlencoded
1111
- Cookie Store
1212
- Redirect Policy
1313
- Original Headers
@@ -18,22 +18,28 @@
1818
- Free-Threaded Safety
1919
- Automatic Decompression
2020

21-
## Example
22-
23-
This example demonstrates how to make a simple GET request using the `wreq` library. So you need install `wreq` and run the following code:
21+
## Installation
2422

2523
```bash
2624
gem install wreq
2725
```
2826

29-
And then the code:
27+
Or add to your Gemfile:
28+
29+
```ruby
30+
gem "wreq"
31+
```
32+
33+
Pre-compiled native gems are available for Linux (x86_64, aarch64) and macOS (arm64).
34+
35+
## Example
3036

3137
```ruby
3238
require "wreq"
3339

34-
# Build a client
40+
# Build a client
3541
client = Wreq::Client.new(emulation: Wreq::Emulation.new(
36-
device: Wreq::EmulationDevice::Chrome142,
42+
device: Wreq::EmulationDevice::Chrome145,
3743
os: Wreq::EmulationOS::MacOS,
3844
skip_http2: false,
3945
skip_headers: false
@@ -50,11 +56,11 @@ Additional learning resources include:
5056
- [Repository Tests](https://github.com/SearchApi/wreq-ruby/tree/main/test)
5157
- [Repository Examples](https://github.com/SearchApi/wreq-ruby/tree/main/examples)
5258

53-
## Behavior
59+
## Browser Emulation
5460

5561
1. **HTTP/2 over TLS**
5662

57-
Due to the complexity of TLS encryption and the widespread adoption of HTTP/2, browser fingerprints such as **JA3**, **JA4**, and **Akamai** cannot be reliably emulated using simple fingerprint strings. Instead of parsing and emulating these string-based fingerprints, `rnet` provides fine-grained control over TLS and HTTP/2 extensions and settings for precise browser behavior emulation.
63+
Due to the complexity of TLS encryption and the widespread adoption of HTTP/2, browser fingerprints such as **JA3**, **JA4**, and **Akamai** cannot be reliably emulated using simple fingerprint strings. Instead of parsing and emulating these string-based fingerprints, `wreq` provides fine-grained control over TLS and HTTP/2 extensions and settings for precise browser behavior emulation.
5864

5965
2. **Device Emulation**
6066

@@ -72,17 +78,20 @@ Most browser device models share identical TLS and HTTP/2 configurations, differ
7278
| **iOS** | iOS (iPhone/iPad) |
7379

7480
</details>
81+
82+
<!-- Emulation profiles sourced from src/emulation.rs - keep in sync -->
83+
7584
- <details>
7685
<summary>Available browser emulations</summary>
7786

78-
| **Browser** | **Versions** |
79-
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
80-
| **Chrome** | `Chrome100`, `Chrome101`, `Chrome104`, `Chrome105`, `Chrome106`, `Chrome107`, `Chrome108`, `Chrome109`, `Chrome110`, `Chrome114`, `Chrome116`, `Chrome117`, `Chrome118`, `Chrome119`, `Chrome120`, `Chrome123`, `Chrome124`, `Chrome126`, `Chrome127`, `Chrome128`, `Chrome129`, `Chrome130`, `Chrome131`, `Chrome132`, `Chrome133`, `Chrome134`, `Chrome135`, `Chrome136`, `Chrome137`, `Chrome138`, `Chrome139`, `Chrome140`, `Chrome141`, `Chrome142`, `Chrome143` |
81-
| **Safari** | `SafariIos17_2`, `SafariIos17_4_1`, `SafariIos16_5`, `Safari15_3`, `Safari15_5`, `Safari15_6_1`, `Safari16`, `Safari16_5`, `Safari17_0`, `Safari17_2_1`, `Safari17_4_1`, `Safari17_5`, `Safari18`, `SafariIPad18`, `Safari18_2`, `SafariIos18_1_1`, `Safari18_3`, `Safari18_3_1`, `Safari18_5`, `Safari26`, `Safari26_1`, `Safari26_2`, `SafariIos26`, `SafariIos26_2`, `SafariIPad26`, `SafariIpad26_2` |
82-
| **Firefox** | `Firefox109`, `Firefox117`, `Firefox128`, `Firefox133`, `Firefox135`, `FirefoxPrivate135`, `FirefoxAndroid135`, `Firefox136`, `FirefoxPrivate136`, `Firefox139`, `Firefox142`, `Firefox143`, `Firefox144`, `Firefox145`, `Firefox146` |
83-
| **OkHttp** | `OkHttp3_9`, `OkHttp3_11`, `OkHttp3_13`, `OkHttp3_14`, `OkHttp4_9`, `OkHttp4_10`, `OkHttp4_12`, `OkHttp5` |
84-
| **Edge** | `Edge101`, `Edge122`, `Edge127`, `Edge131`, `Edge134`, `Edge135`, `Edge136`, `Edge137`, `Edge138`, `Edge139`, `Edge140`, `Edge141`, `Edge142`|
85-
| **Opera** | `Opera116`, `Opera117`, `Opera118`, `Opera119` |
87+
| **Browser** | **Versions** |
88+
| ----------- | ------------ |
89+
| **Chrome** | `Chrome100`, `Chrome101`, `Chrome104`, `Chrome105`, `Chrome106`, `Chrome107`, `Chrome108`, `Chrome109`, `Chrome110`, `Chrome114`, `Chrome116`, `Chrome117`, `Chrome118`, `Chrome119`, `Chrome120`, `Chrome123`, `Chrome124`, `Chrome126`, `Chrome127`, `Chrome128`, `Chrome129`, `Chrome130`, `Chrome131`, `Chrome132`, `Chrome133`, `Chrome134`, `Chrome135`, `Chrome136`, `Chrome137`, `Chrome138`, `Chrome139`, `Chrome140`, `Chrome141`, `Chrome142`, `Chrome143`, `Chrome144`, `Chrome145` |
90+
| **Edge** | `Edge101`, `Edge122`, `Edge127`, `Edge131`, `Edge134`, `Edge135`, `Edge136`, `Edge137`, `Edge138`, `Edge139`, `Edge140`, `Edge141`, `Edge142`, `Edge143`, `Edge144`, `Edge145` |
91+
| **Firefox** | `Firefox109`, `Firefox117`, `Firefox128`, `Firefox133`, `Firefox135`, `FirefoxPrivate135`, `FirefoxAndroid135`, `Firefox136`, `FirefoxPrivate136`, `Firefox139`, `Firefox142`, `Firefox143`, `Firefox144`, `Firefox145`, `Firefox146`, `Firefox147` |
92+
| **Safari** | `Safari15_3`, `Safari15_5`, `Safari15_6_1`, `Safari16`, `Safari16_5`, `Safari17_0`, `Safari17_2_1`, `Safari17_4_1`, `Safari17_5`, `Safari17_6`, `Safari18`, `Safari18_2`, `Safari18_3`, `Safari18_3_1`, `Safari18_5`, `Safari26`, `Safari26_1`, `Safari26_2`, `SafariIos16_5`, `SafariIos17_2`, `SafariIos17_4_1`, `SafariIos18_1_1`, `SafariIos26`, `SafariIos26_2`, `SafariIPad18`, `SafariIPad26`, `SafariIpad26_2` |
93+
| **OkHttp** | `OkHttp3_9`, `OkHttp3_11`, `OkHttp3_13`, `OkHttp3_14`, `OkHttp4_9`, `OkHttp4_10`, `OkHttp4_12`, `OkHttp5` |
94+
| **Opera** | `Opera116`, `Opera117`, `Opera118`, `Opera119` |
8695

8796
</details>
8897

@@ -106,22 +115,35 @@ gem build wreq.gemspec
106115
gem install wreq-*.gem
107116

108117
# Option 2: Build pre-compiled platform gem (recommended for distribution)
109-
# This creates a platform-specific gem (e.g., wreq-0.1.0-arm64-darwin.gem)
118+
# This creates a platform-specific gem (e.g., wreq-0.1.0-arm64-darwin.gem)
110119
# with pre-compiled binaries. Users can install quickly without build environment.
111120
bundle exec rake compile
112121
bundle exec rake native gem
113122
gem install pkg/wreq-*.gem
114123

115124
# Development workflow
116125
bundle exec rake compile # Compile for development/testing
117-
bundle exec rake test # Run tests
126+
bundle exec rake test # Run tests
118127
bundle exec ruby examples/body.rb # Run examples without installing
119128
```
120129

121130
## License
122131

123132
Licensed under either of Apache License, Version 2.0 ([LICENSE](./LICENSE) or http://www.apache.org/licenses/LICENSE-2.0).
124133

125-
## Contribution
134+
## Contributing
126135

127136
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the [Apache-2.0](./LICENSE) license, shall be licensed as above, without any additional terms or conditions.
137+
138+
---
139+
140+
<p align="center">
141+
Maintained by
142+
<a href="https://www.searchapi.io">
143+
<picture>
144+
<source media="(prefers-color-scheme: dark)" srcset="https://www.searchapi.io/press/v2/svg/searchapi_logo_white_h.svg">
145+
<source media="(prefers-color-scheme: light)" srcset="https://www.searchapi.io/press/v2/svg/searchapi_logo_black_h.svg">
146+
<img alt="SearchApi" src="https://www.searchapi.io/press/v2/svg/searchapi_logo_black_h.svg" height="20">
147+
</picture>
148+
</a>
149+
</p>

wreq.gemspec

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,16 @@ Gem::Specification.new do |spec|
2222
.fetch("version")
2323
spec.authors = ["SearchApi"]
2424
spec.email = ["support@searchapi.io"]
25-
spec.summary = "Ruby bindings for Wreq, HTTP client library in Rust."
26-
spec.homepage = "https://github.com/SearchApi"
25+
spec.summary = "Ruby HTTP client with TLS/HTTP2 browser fingerprinting - emulates Chrome, Edge, Firefox, Safari, and more"
26+
spec.description = "An easy and powerful Ruby HTTP client with advanced browser fingerprinting " \
27+
"that accurately emulates Chrome, Edge, Firefox, Safari, Opera, and OkHttp " \
28+
"with precise TLS/HTTP2 signatures. Built on wreq (Rust) with BoringSSL."
29+
spec.homepage = "https://github.com/SearchApi/wreq-ruby"
2730
spec.license = "Apache-2.0"
2831
spec.metadata = {
2932
"bug_tracker_uri" => "https://github.com/SearchApi/wreq-ruby/issues",
3033
"changelog_uri" => "https://github.com/SearchApi/wreq-ruby/releases",
31-
"documentation_uri" => "https://github.com/SearchApi/wreq-ruby/README.md",
34+
"documentation_uri" => "https://github.com/SearchApi/wreq-ruby#readme",
3235
"homepage_uri" => spec.homepage,
3336
"source_code_uri" => "https://github.com/SearchApi/wreq-ruby",
3437
"rubygems_mfa_required" => "true"
@@ -51,7 +54,7 @@ Gem::Specification.new do |spec|
5154
spec.extensions = ["./extconf.rb"]
5255

5356
# Exclude non-Ruby files from RDoc to prevent parsing errors
54-
spec.rdoc_options = ["--exclude", "Cargo\\..*", "--exclude", "--exclude", "\\.rs$"]
57+
spec.rdoc_options = ["--exclude", "Cargo\\..*", "--exclude", "\\.rs$"]
5558

5659
spec.requirements = ["Rust >= 1.85"]
5760
# use a Ruby version which:

0 commit comments

Comments
 (0)