ethon-impersonate 0.17.8-arm64-darwin-24 → 0.17.10-arm64-darwin-24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +66 -54
- data/LICENSE +1 -0
- data/README.md +69 -21
- data/ethon-impersonate.gemspec +2 -2
- data/ext/libcurl-impersonate.4.dylib +0 -0
- data/lib/ethon_impersonate/curls/classes.rb +1 -1
- data/lib/ethon_impersonate/easy/header.rb +5 -1
- data/lib/ethon_impersonate/impersonate/settings.rb +4 -3
- data/lib/ethon_impersonate/impersonate/targets.rb +18 -8
- data/lib/ethon_impersonate/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8cc8b654323ff24981147b0fe79044fe9370a3f9b5704974dd8c9b2b4eb292bc
|
|
4
|
+
data.tar.gz: 729ad911522dcfad444d0f222869321c1ae2e841dbea3264f46d0091ed81c1a3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 19cd9cb87ddbce1564787cbb64b410bc2133e83bd0434b94022f445601e0845603ac8c00814793ab06761b0b1793a0c511d98250b68988ceb7f430931a5bb702
|
|
7
|
+
data.tar.gz: 1df8e015dcfb3f7f302a1caac80050900e53023085b831aa44563d3abe411958a1b6688c70717c67e763d4cf61e4fb4b088aebfb190e7bbe15f116bc3a93c5cd
|
data/CHANGELOG.md
CHANGED
|
@@ -2,49 +2,61 @@
|
|
|
2
2
|
|
|
3
3
|
## Master
|
|
4
4
|
|
|
5
|
-
[Full Changelog](https://github.com/
|
|
5
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.17.9...master)
|
|
6
|
+
|
|
7
|
+
## 0.17.9
|
|
8
|
+
|
|
9
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.17.8...v0.17.9)
|
|
10
|
+
|
|
11
|
+
* Bumped [`curl-impersonate`](https://github.com/lexiforest/curl-impersonate) to `v1.0.0`
|
|
12
|
+
|
|
13
|
+
## 0.17.8
|
|
14
|
+
|
|
15
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.16.0...v0.17.8)
|
|
16
|
+
|
|
17
|
+
* Added basic support for [`curl-impersonate`](https://github.com/lexiforest/curl-impersonate) @ `v1.0.0rc1`
|
|
6
18
|
|
|
7
19
|
## 0.16.0
|
|
8
20
|
|
|
9
|
-
[Full Changelog](https://github.com/
|
|
21
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.15.0...v0.16.0)
|
|
10
22
|
|
|
11
23
|
* Added `redirect_url` value to available informations and `Easy::Mirror`.
|
|
12
24
|
([Adrien Rey-Jarthon](https://github.com/jarthod)
|
|
13
25
|
|
|
14
26
|
## 0.15.0
|
|
15
27
|
|
|
16
|
-
[Full Changelog](https://github.com/
|
|
28
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.14.0...v0.15.0)
|
|
17
29
|
|
|
18
30
|
## 0.12.0
|
|
19
31
|
|
|
20
|
-
[Full Changelog](https://github.com/
|
|
32
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.11.0...v0.12.0)
|
|
21
33
|
|
|
22
|
-
- Removed deprecated `CURLE_SSL_CACERT` pinned in curl v7.62.0 ([@arku](https://github.com/arku) in [#158](https://github.com/
|
|
34
|
+
- Removed deprecated `CURLE_SSL_CACERT` pinned in curl v7.62.0 ([@arku](https://github.com/arku) in [#158](https://github.com/serpapi/ethon-impersonate/pull/158))
|
|
23
35
|
|
|
24
36
|
|
|
25
37
|
## 0.11.0
|
|
26
38
|
|
|
27
|
-
[Full Changelog](https://github.com/
|
|
39
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.10.1...v0.11.0)
|
|
28
40
|
|
|
29
41
|
## 0.10.1
|
|
30
42
|
|
|
31
|
-
[Full Changelog](https://github.com/
|
|
43
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.10.0...v0.10.1)
|
|
32
44
|
|
|
33
45
|
## 0.10.0
|
|
34
46
|
|
|
35
|
-
[Full Changelog](https://github.com/
|
|
47
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.9.1...v0.10.0)
|
|
36
48
|
|
|
37
49
|
## 0.9.1
|
|
38
50
|
|
|
39
|
-
[Full Changelog](https://github.com/
|
|
51
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.9.0...v0.9.1)
|
|
40
52
|
|
|
41
53
|
## 0.9.0
|
|
42
54
|
|
|
43
|
-
[Full Changelog](https://github.com/
|
|
55
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.8.1...v0.9.0)
|
|
44
56
|
|
|
45
57
|
## 0.8.1
|
|
46
58
|
|
|
47
|
-
[Full Changelog](https://github.com/
|
|
59
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.8.0...v0.8.1)
|
|
48
60
|
|
|
49
61
|
* Support optional escaping of params.
|
|
50
62
|
([Tasos Laskos](https://github.com/zapotek)
|
|
@@ -53,24 +65,24 @@
|
|
|
53
65
|
|
|
54
66
|
## 0.8.0
|
|
55
67
|
|
|
56
|
-
[Full Changelog](https://github.com/
|
|
68
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.7.3...v0.7.4)
|
|
57
69
|
|
|
58
70
|
* `Easy::Mirror`: Reduced object allocations and method calls during info handling.
|
|
59
71
|
([Tasos Laskos](https://github.com/zapotek)
|
|
60
72
|
|
|
61
73
|
## 0.7.4
|
|
62
74
|
|
|
63
|
-
[Full Changelog](https://github.com/
|
|
75
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.7.3...v0.7.4)
|
|
64
76
|
|
|
65
77
|
* Support different array encodings for params.
|
|
66
|
-
([Marcello Barnaba](https://github.com/ifad), [\#104](https://github.com/
|
|
78
|
+
([Marcello Barnaba](https://github.com/ifad), [\#104](https://github.com/serpapi/ethon-impersonate/pull/104))
|
|
67
79
|
* Programtic access to version infos.
|
|
68
|
-
([Jonas Wagner](https://github.com/jwagner), [\#90](https://github.com/
|
|
80
|
+
([Jonas Wagner](https://github.com/jwagner), [\#90](https://github.com/serpapi/ethon-impersonate/pull/90))
|
|
69
81
|
|
|
70
82
|
|
|
71
83
|
## 0.7.3
|
|
72
84
|
|
|
73
|
-
[Full Changelog](https://github.com/
|
|
85
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.7.2...v0.7.3)
|
|
74
86
|
|
|
75
87
|
* `EthonImpersonate::Curl::FDSet`
|
|
76
88
|
* Set `:fd_array` size to the current MS Windows `FD_SETSIZE` (2048).
|
|
@@ -81,7 +93,7 @@
|
|
|
81
93
|
|
|
82
94
|
## 0.7.2
|
|
83
95
|
|
|
84
|
-
[Full Changelog](https://github.com/
|
|
96
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.7.1...v0.7.2)
|
|
85
97
|
|
|
86
98
|
* FFI data-types updated to be more correct.
|
|
87
99
|
|
|
@@ -96,25 +108,25 @@ Not backwards compatible changes:
|
|
|
96
108
|
|
|
97
109
|
* `mime-types` are no longer a dependency. The gem will be still used if available to determine the mime type of a file which is uploaded. That means you have to have take care of the gem installation yourself.
|
|
98
110
|
|
|
99
|
-
[Full Changelog](https://github.com/
|
|
111
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.6.3...v0.7.0)
|
|
100
112
|
|
|
101
113
|
## 0.6.3
|
|
102
114
|
|
|
103
|
-
[Full Changelog](https://github.com/
|
|
115
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.6.2...v0.6.3)
|
|
104
116
|
|
|
105
117
|
## 0.6.2
|
|
106
118
|
|
|
107
|
-
[Full Changelog](https://github.com/
|
|
119
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.6.1...v0.6.2)
|
|
108
120
|
|
|
109
121
|
## 0.6.1
|
|
110
122
|
|
|
111
|
-
[Full Changelog](https://github.com/
|
|
123
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.6.0...v0.6.1)
|
|
112
124
|
|
|
113
125
|
The changelog entries are coming soon!
|
|
114
126
|
|
|
115
127
|
## 0.6.0
|
|
116
128
|
|
|
117
|
-
[Full Changelog](https://github.com/
|
|
129
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.5.12...v0.6.0)
|
|
118
130
|
|
|
119
131
|
The changelog entries are coming soon!
|
|
120
132
|
|
|
@@ -125,59 +137,59 @@ Bugfixes:
|
|
|
125
137
|
|
|
126
138
|
## 0.5.12
|
|
127
139
|
|
|
128
|
-
[Full Changelog](https://github.com/
|
|
140
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.5.11...v0.5.12)
|
|
129
141
|
|
|
130
142
|
Enhancements:
|
|
131
143
|
|
|
132
144
|
* Performance optimizations.
|
|
133
|
-
([Kyle Oppenheim](https://github.com/koppenheim) and [Richie Vos](https://github.com/richievos), [\#48](https://github.com/
|
|
145
|
+
([Kyle Oppenheim](https://github.com/koppenheim) and [Richie Vos](https://github.com/richievos), [\#48](https://github.com/serpapi/ethon-impersonate/pull/48))
|
|
134
146
|
* Reuse memory pointer.
|
|
135
|
-
([Richie Vos](https://github.com/richievos), [\#49](https://github.com/
|
|
147
|
+
([Richie Vos](https://github.com/richievos), [\#49](https://github.com/serpapi/ethon-impersonate/pull/49))
|
|
136
148
|
|
|
137
149
|
Bugfixes:
|
|
138
150
|
|
|
139
151
|
* Fix windows install.
|
|
140
|
-
([Derik Olsson](https://github.com/derikolsson), [\#47](https://github.com/
|
|
152
|
+
([Derik Olsson](https://github.com/derikolsson), [\#47](https://github.com/serpapi/ethon-impersonate/pull/47))
|
|
141
153
|
* Handle urls that already contain query params.
|
|
142
|
-
([Turner King](https://github.com/turnerking ), [\#45](https://github.com/
|
|
154
|
+
([Turner King](https://github.com/turnerking ), [\#45](https://github.com/serpapi/ethon-impersonate/pull/45))
|
|
143
155
|
|
|
144
156
|
## 0.5.11
|
|
145
157
|
|
|
146
|
-
[Full Changelog](https://github.com/
|
|
158
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.5.10...v0.5.11)
|
|
147
159
|
|
|
148
160
|
Enhancements:
|
|
149
161
|
|
|
150
162
|
* Add support for postredirs, unrestricted_auth.
|
|
151
163
|
* Add support for cookie, cookiejar, cookiefile.
|
|
152
|
-
([erwanlr](https://github.com/erwanlr), [\#46](https://github.com/
|
|
164
|
+
([erwanlr](https://github.com/erwanlr), [\#46](https://github.com/serpapi/ethon-impersonate/pull/46))
|
|
153
165
|
* Relax ffi requirements.
|
|
154
|
-
([voxik](https://github.com/voxik), [\#40](https://github.com/
|
|
166
|
+
([voxik](https://github.com/voxik), [\#40](https://github.com/serpapi/ethon-impersonate/pull/40))
|
|
155
167
|
* Various documentation improvements.
|
|
156
168
|
([Craig Little](https://github.com/craiglittle))
|
|
157
169
|
|
|
158
170
|
Bugfixes:
|
|
159
171
|
|
|
160
172
|
* Fix the memory leaks.
|
|
161
|
-
([Richie Vos](https://github.com/richievos), [\#45](https://github.com/
|
|
173
|
+
([Richie Vos](https://github.com/richievos), [\#45](https://github.com/serpapi/ethon-impersonate/pull/45))
|
|
162
174
|
|
|
163
175
|
## 0.5.10
|
|
164
176
|
|
|
165
|
-
[Full Changelog](https://github.com/
|
|
177
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.5.9...v0.5.10)
|
|
166
178
|
|
|
167
179
|
Enhancements:
|
|
168
180
|
|
|
169
181
|
* Allow custom requests.
|
|
170
|
-
([Nathan Sutton](https://github.com/nate), [\#36](https://github.com/
|
|
182
|
+
([Nathan Sutton](https://github.com/nate), [\#36](https://github.com/serpapi/ethon-impersonate/pull/36))
|
|
171
183
|
* Use updated version of FFI.
|
|
172
184
|
|
|
173
185
|
Bugfixes:
|
|
174
186
|
|
|
175
187
|
* Fix windows install issue.
|
|
176
|
-
([brainsucker](https://github.com/brainsucker), [\#38](https://github.com/
|
|
188
|
+
([brainsucker](https://github.com/brainsucker), [\#38](https://github.com/serpapi/ethon-impersonate/pull/38))
|
|
177
189
|
|
|
178
190
|
## 0.5.9
|
|
179
191
|
|
|
180
|
-
[Full Changelog](https://github.com/
|
|
192
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.5.8...v0.5.9)
|
|
181
193
|
|
|
182
194
|
Enhancements:
|
|
183
195
|
|
|
@@ -185,17 +197,17 @@ Enhancements:
|
|
|
185
197
|
|
|
186
198
|
## 0.5.8
|
|
187
199
|
|
|
188
|
-
[Full Changelog](https://github.com/
|
|
200
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.5.7...v0.5.8)
|
|
189
201
|
|
|
190
202
|
Enhancements:
|
|
191
203
|
|
|
192
204
|
* Add support for protocols and redir_protocols(
|
|
193
205
|
[libcurl SASL buffer overflow vulnerability](http://curl.haxx.se/docs/adv_20130206.html)).
|
|
194
|
-
* Add max_send_speed_large and max_recv_speed_large([Paul Schuegraf](https://github.com/pschuegr), [\#33](https://github.com/
|
|
206
|
+
* Add max_send_speed_large and max_recv_speed_large([Paul Schuegraf](https://github.com/pschuegr), [\#33](https://github.com/serpapi/ethon-impersonate/pull/33))
|
|
195
207
|
|
|
196
208
|
## 0.5.7
|
|
197
209
|
|
|
198
|
-
[Full Changelog](https://github.com/
|
|
210
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.5.6...v0.5.7)
|
|
199
211
|
|
|
200
212
|
Enhancements:
|
|
201
213
|
|
|
@@ -203,7 +215,7 @@ Enhancements:
|
|
|
203
215
|
|
|
204
216
|
## 0.5.6
|
|
205
217
|
|
|
206
|
-
[Full Changelog](https://github.com/
|
|
218
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.5.4...v0.5.6)
|
|
207
219
|
|
|
208
220
|
Bugfixes:
|
|
209
221
|
|
|
@@ -211,7 +223,7 @@ Bugfixes:
|
|
|
211
223
|
|
|
212
224
|
## 0.5.4
|
|
213
225
|
|
|
214
|
-
[Full Changelog](https://github.com/
|
|
226
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.5.3...v0.5.4)
|
|
215
227
|
|
|
216
228
|
Enhancements:
|
|
217
229
|
|
|
@@ -221,7 +233,7 @@ Enhancements:
|
|
|
221
233
|
|
|
222
234
|
## 0.5.3
|
|
223
235
|
|
|
224
|
-
[Full Changelog](https://github.com/
|
|
236
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.5.2...v0.5.3)
|
|
225
237
|
|
|
226
238
|
Enhancements:
|
|
227
239
|
|
|
@@ -236,7 +248,7 @@ Bugfixes:
|
|
|
236
248
|
|
|
237
249
|
## 0.5.2
|
|
238
250
|
|
|
239
|
-
[Full Changelog](https://github.com/
|
|
251
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.5.1...v0.5.2)
|
|
240
252
|
|
|
241
253
|
Enhancements:
|
|
242
254
|
|
|
@@ -249,7 +261,7 @@ Bugfixes:
|
|
|
249
261
|
|
|
250
262
|
## 0.5.1
|
|
251
263
|
|
|
252
|
-
[Full Changelog](https://github.com/
|
|
264
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.5.0...v0.5.1)
|
|
253
265
|
|
|
254
266
|
Bugfixes:
|
|
255
267
|
|
|
@@ -258,7 +270,7 @@ Bugfixes:
|
|
|
258
270
|
|
|
259
271
|
## 0.5.0
|
|
260
272
|
|
|
261
|
-
[Full Changelog](https://github.com/
|
|
273
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.4.4...v0.5.0)
|
|
262
274
|
|
|
263
275
|
Enhancements:
|
|
264
276
|
|
|
@@ -272,7 +284,7 @@ Bugfixes:
|
|
|
272
284
|
|
|
273
285
|
## 0.4.4
|
|
274
286
|
|
|
275
|
-
[Full Changelog](https://github.com/
|
|
287
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.4.3...v0.4.4)
|
|
276
288
|
|
|
277
289
|
Enhancements:
|
|
278
290
|
|
|
@@ -280,7 +292,7 @@ Enhancements:
|
|
|
280
292
|
|
|
281
293
|
## 0.4.3
|
|
282
294
|
|
|
283
|
-
[Full Changelog](https://github.com/
|
|
295
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.4.2...v0.4.3)
|
|
284
296
|
|
|
285
297
|
Enhancements:
|
|
286
298
|
|
|
@@ -295,7 +307,7 @@ Bugfixes:
|
|
|
295
307
|
|
|
296
308
|
## 0.4.2
|
|
297
309
|
|
|
298
|
-
[Full Changelog](https://github.com/
|
|
310
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.4.1...v0.4.2)
|
|
299
311
|
|
|
300
312
|
Enhancements:
|
|
301
313
|
|
|
@@ -304,7 +316,7 @@ Enhancements:
|
|
|
304
316
|
|
|
305
317
|
## 0.4.1
|
|
306
318
|
|
|
307
|
-
[Full Changelog](https://github.com/
|
|
319
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.4.0...v0.4.1)
|
|
308
320
|
|
|
309
321
|
Bugfixes:
|
|
310
322
|
|
|
@@ -313,7 +325,7 @@ Bugfixes:
|
|
|
313
325
|
|
|
314
326
|
## 0.4.0
|
|
315
327
|
|
|
316
|
-
[Full Changelog](https://github.com/
|
|
328
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.3.0...v0.4.0)
|
|
317
329
|
|
|
318
330
|
Enhancements:
|
|
319
331
|
|
|
@@ -328,7 +340,7 @@ Bugfixes:
|
|
|
328
340
|
|
|
329
341
|
## 0.3.0
|
|
330
342
|
|
|
331
|
-
[Full Changelog](https://github.com/
|
|
343
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.2.0...v0.3.0)
|
|
332
344
|
|
|
333
345
|
Enhancements:
|
|
334
346
|
|
|
@@ -341,7 +353,7 @@ Bugfixes:
|
|
|
341
353
|
|
|
342
354
|
## 0.2.0
|
|
343
355
|
|
|
344
|
-
[Full Changelog](https://github.com/
|
|
356
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.1.0...v0.2.0)
|
|
345
357
|
|
|
346
358
|
Enhancements:
|
|
347
359
|
|
|
@@ -353,12 +365,12 @@ Enhancements:
|
|
|
353
365
|
|
|
354
366
|
## 0.1.0
|
|
355
367
|
|
|
356
|
-
[Full Changelog](https://github.com/
|
|
368
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.0.2...v0.1.0)
|
|
357
369
|
|
|
358
370
|
Enhancements:
|
|
359
371
|
|
|
360
372
|
* Documentation
|
|
361
|
-
( [Alex P](https://github.com/ifesdjeen), [\#13](https://github.com/
|
|
373
|
+
( [Alex P](https://github.com/ifesdjeen), [\#13](https://github.com/typhoeus/ethon/issues/13) )
|
|
362
374
|
* New libcurl option dns_cache_timeout
|
|
363
375
|
( [Chris Heald](https://github.com/cheald), [\#192](https://github.com/typhoeus/typhoeus/pull/192) )
|
|
364
376
|
|
|
@@ -369,7 +381,7 @@ Bugfixes:
|
|
|
369
381
|
|
|
370
382
|
## 0.0.2
|
|
371
383
|
|
|
372
|
-
[Full Changelog](https://github.com/
|
|
384
|
+
[Full Changelog](https://github.com/serpapi/ethon-impersonate/compare/v0.0.1...v0.0.2)
|
|
373
385
|
|
|
374
386
|
Bugfixes:
|
|
375
387
|
|
data/LICENSE
CHANGED
data/README.md
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
# Ethon Impersonate     
|
|
4
|
+
|
|
1
5
|
[](https://badge.fury.io/rb/ethon-impersonate)
|
|
2
|
-
[](https://github.com/serpapi/ethon-impersonate/actions/workflows/ruby.yml)
|
|
3
7
|
|
|
4
|
-
|
|
8
|
+
**Ethon Impersonate** is a fork of [Ethon](https://github.com/typhoeus/ethon) that wraps [libcurl-impersonate](https://github.com/lexiforest/curl-impersonate).
|
|
5
9
|
|
|
6
10
|
In Greek mythology, Ethon, the son of Typhoeus and Echidna, is a gigantic eagle. So much for the history.
|
|
7
|
-
|
|
11
|
+
|
|
12
|
+
This allows you to make HTTP requests that appear to come from real browsers, helping to bypass bot detection and fingerprinting.
|
|
8
13
|
|
|
9
14
|
## Installation
|
|
10
15
|
|
|
@@ -18,6 +23,15 @@ With rubygems:
|
|
|
18
23
|
gem install ethon-impersonate
|
|
19
24
|
```
|
|
20
25
|
|
|
26
|
+
## Dependencies
|
|
27
|
+
On MacOS Apple Silicon, you need to install the following dependencies using Homebrew:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
brew install libidn2 rtmpdump zstd
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Note: Homebrew must be loaded in the same arch than the Ruby interpreter. If you are using `arch -x86_64` to run Ruby, you must also run Homebrew with `arch -x86_64 brew install ...`.
|
|
34
|
+
|
|
21
35
|
## Usage
|
|
22
36
|
|
|
23
37
|
Making the first request is simple:
|
|
@@ -47,6 +61,52 @@ easy.response_body
|
|
|
47
61
|
#=> "<!doctype html><html ..."
|
|
48
62
|
```
|
|
49
63
|
|
|
64
|
+
## Browser Impersonation
|
|
65
|
+
|
|
66
|
+
The main feature of this gem is the ability to impersonate real browsers. Use the `impersonate` method to configure the request to look like it's coming from a specific browser:
|
|
67
|
+
|
|
68
|
+
```ruby
|
|
69
|
+
easy = EthonImpersonate::Easy.new(url: "www.example.com")
|
|
70
|
+
easy.impersonate("chrome136") # Impersonate Chrome 136
|
|
71
|
+
easy.perform
|
|
72
|
+
easy.response_code
|
|
73
|
+
#=> 200
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Available Browser Targets
|
|
77
|
+
|
|
78
|
+
The gem supports all browser targets available in curl-impersonate. Some popular targets include:
|
|
79
|
+
|
|
80
|
+
- **Chrome**: `chrome136`, `chrome131_android`
|
|
81
|
+
- **Firefox**: `firefox135`
|
|
82
|
+
- **Safari**: `safari184`, `safari184_ios`
|
|
83
|
+
- **Edge**: `edge101`
|
|
84
|
+
- **Tor**: `tor145`
|
|
85
|
+
|
|
86
|
+
For a complete list of available targets, see the [curl-impersonate bin directory](https://github.com/lexiforest/curl-impersonate/tree/main/bin).
|
|
87
|
+
|
|
88
|
+
### Example with Browser Impersonation
|
|
89
|
+
|
|
90
|
+
```ruby
|
|
91
|
+
# Impersonate Chrome 136
|
|
92
|
+
easy = EthonImpersonate::Easy.new(url: "https://tls.browserleaks.com/json")
|
|
93
|
+
easy.impersonate("chrome136")
|
|
94
|
+
easy.perform
|
|
95
|
+
#=> :ok
|
|
96
|
+
|
|
97
|
+
# Impersonate Firefox 135
|
|
98
|
+
easy = EthonImpersonate::Easy.new(url: "https://tls.browserleaks.com/json")
|
|
99
|
+
easy.impersonate("firefox135")
|
|
100
|
+
easy.perform
|
|
101
|
+
#=> :ok
|
|
102
|
+
|
|
103
|
+
# Impersonate Safari 184
|
|
104
|
+
easy = EthonImpersonate::Easy.new(url: "https://tls.browserleaks.com/json")
|
|
105
|
+
easy.impersonate("safari184")
|
|
106
|
+
easy.perform
|
|
107
|
+
#=> :ok
|
|
108
|
+
```
|
|
109
|
+
|
|
50
110
|
## Http
|
|
51
111
|
|
|
52
112
|
In order to make life easier, there are some helpers for making HTTP requests:
|
|
@@ -91,26 +151,14 @@ multi.add(easy)
|
|
|
91
151
|
multi.perform
|
|
92
152
|
```
|
|
93
153
|
|
|
94
|
-
##
|
|
154
|
+
## Sponsors
|
|
95
155
|
|
|
96
|
-
|
|
156
|
+
Ethon Impersonate is maintained by **SerpApi**.
|
|
97
157
|
|
|
98
|
-
|
|
158
|
+
Thanks to all <a href="https://github.com/serpapi/ethon-impersonate/graphs/contributors">contributors</a> of this project past and present.
|
|
99
159
|
|
|
100
|
-
|
|
101
|
-
copy of this software and associated documentation files (the "Software"),
|
|
102
|
-
to deal in the Software without restriction, including without
|
|
103
|
-
limitation the rights to use, copy, modify, merge, publish, distribute,
|
|
104
|
-
sublicense, and/or sell copies of the Software, and to permit persons
|
|
105
|
-
to whom the Software is furnished to do so, subject to the following conditions:
|
|
160
|
+
------
|
|
106
161
|
|
|
107
|
-
|
|
108
|
-
in all copies or substantial portions of the Software.
|
|
162
|
+
<a href="https://serpapi.com/" target="_blank"><img src="https://raw.githubusercontent.com/serpapi/ethon-impersonate/master/assets/serpapi.png" alt="SerpAPI" height="67" width="63"></a>
|
|
109
163
|
|
|
110
|
-
|
|
111
|
-
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
112
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
113
|
-
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
114
|
-
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
115
|
-
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
116
|
-
OTHER DEALINGS IN THE SOFTWARE.
|
|
164
|
+
Scrape Google and other search engines from [SerpApi](https://serpapi.com/)'s fast, easy, and complete API. 0.66s average response time (≤ 0.5s for Ludicrous Speed Max accounts), 99.95% SLAs, pay for successful responses only.
|
data/ethon-impersonate.gemspec
CHANGED
|
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
|
11
11
|
s.platform = Gem::Platform::RUBY
|
|
12
12
|
s.authors = ["David Sojevic", "Hans Hasselberg"]
|
|
13
13
|
s.email = ["david@sojevic.com"]
|
|
14
|
-
s.homepage = "https://github.com/
|
|
14
|
+
s.homepage = "https://github.com/serpapi/ethon-impersonate"
|
|
15
15
|
s.summary = "Impersonate browser-like HTTP requests."
|
|
16
16
|
s.description = "Realistic browser-like HTTP requests using curl-impersonate's impersonation capabilities."
|
|
17
17
|
|
|
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
|
|
|
23
23
|
|
|
24
24
|
s.files = Dir.chdir(__dir__) do
|
|
25
25
|
`git ls-files -z`.split("\x0")
|
|
26
|
-
end.reject { |file| file.start_with?(*%w[. Gemfile Guardfile Rakefile profile spec scripts]) || file.end_with?(".gitignore") }
|
|
26
|
+
end.reject { |file| file.start_with?(*%w[. Gemfile Guardfile Rakefile profile spec scripts assets]) || file.end_with?(".gitignore") }
|
|
27
27
|
|
|
28
28
|
s.require_path = "lib"
|
|
29
29
|
end
|
|
Binary file
|
|
@@ -32,7 +32,7 @@ module EthonImpersonate
|
|
|
32
32
|
|
|
33
33
|
def clear; self[:fd_count] = 0; end
|
|
34
34
|
else
|
|
35
|
-
# https://github.com/
|
|
35
|
+
# https://github.com/typhoeus/ethon/issues/182
|
|
36
36
|
FD_SETSIZE = begin
|
|
37
37
|
# Allow to override the (new) default cap
|
|
38
38
|
if ENV['ETHON_FD_SIZE']
|
|
@@ -25,7 +25,11 @@ module EthonImpersonate
|
|
|
25
25
|
headers ||= {}
|
|
26
26
|
header_list = nil
|
|
27
27
|
headers.each do |k, v|
|
|
28
|
-
|
|
28
|
+
v_list = v.is_a?(Array) ? v : [v]
|
|
29
|
+
|
|
30
|
+
v_list.each do |v_item|
|
|
31
|
+
header_list = Curl.slist_append(header_list, compose_header(k,v_item))
|
|
32
|
+
end
|
|
29
33
|
end
|
|
30
34
|
Curl.set_option(:httpheader, header_list, handle)
|
|
31
35
|
|
|
@@ -6,7 +6,7 @@ require "ffi/platform"
|
|
|
6
6
|
module EthonImpersonate
|
|
7
7
|
module Impersonate
|
|
8
8
|
module Settings
|
|
9
|
-
LIB_VERSION = "1.0
|
|
9
|
+
LIB_VERSION = "1.1.0"
|
|
10
10
|
LIB_EXT_PATH = File.expand_path("../../ext/", File.dirname(__dir__))
|
|
11
11
|
|
|
12
12
|
LIB_DOWNLOAD_BASE_URL = "https://github.com/lexiforest/curl-impersonate/releases/download/v#{LIB_VERSION}/"
|
|
@@ -25,12 +25,13 @@ module EthonImpersonate
|
|
|
25
25
|
# "i686-windows" => "libcurl-impersonate-v#{LIB_VERSION}.i686-win32.tar.gz",
|
|
26
26
|
# "riscv64-linux" => "libcurl-impersonate-v#{LIB_VERSION}.riscv64-linux-gnu.tar.gz",
|
|
27
27
|
"x86_64-linux" => "libcurl-impersonate-v#{LIB_VERSION}.x86_64-linux-gnu.tar.gz",
|
|
28
|
-
|
|
28
|
+
"x86_64-darwin" => "libcurl-impersonate-v#{LIB_VERSION}.x86_64-macos.tar.gz",
|
|
29
29
|
# "x86_64-windows" => "libcurl-impersonate-v#{LIB_VERSION}.x86_64-win32.tar.gz",
|
|
30
30
|
}.freeze
|
|
31
31
|
|
|
32
32
|
GEM_PLATFORMS_MAP = {
|
|
33
|
-
"aarch64-darwin" => ["arm64-darwin-24"],
|
|
33
|
+
"aarch64-darwin" => ["arm64-darwin-24", "arm64-darwin"],
|
|
34
|
+
"x86_64-darwin" => ["x86_64-darwin-24"],
|
|
34
35
|
"x86_64-windows" => ["x64-mingw32"],
|
|
35
36
|
}.freeze
|
|
36
37
|
|
|
@@ -21,6 +21,7 @@ module EthonImpersonate
|
|
|
21
21
|
"chrome124",
|
|
22
22
|
"chrome131",
|
|
23
23
|
"chrome133a",
|
|
24
|
+
"chrome136",
|
|
24
25
|
].freeze
|
|
25
26
|
|
|
26
27
|
CHROME_TARGETS = [
|
|
@@ -39,15 +40,17 @@ module EthonImpersonate
|
|
|
39
40
|
].freeze
|
|
40
41
|
|
|
41
42
|
SAFARI_MOBILE_TARGETS = [
|
|
42
|
-
"
|
|
43
|
-
"
|
|
43
|
+
"safari172_ios",
|
|
44
|
+
"safari180_ios",
|
|
45
|
+
"safari184_ios",
|
|
44
46
|
].freeze
|
|
45
47
|
|
|
46
48
|
SAFARI_DESKTOP_TARGETS = [
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
49
|
+
"safari153",
|
|
50
|
+
"safari155",
|
|
51
|
+
"safari170",
|
|
52
|
+
"safari180",
|
|
53
|
+
"safari184",
|
|
51
54
|
].freeze
|
|
52
55
|
|
|
53
56
|
SAFARI_TARGETS = [
|
|
@@ -55,11 +58,16 @@ module EthonImpersonate
|
|
|
55
58
|
*SAFARI_DESKTOP_TARGETS,
|
|
56
59
|
].freeze
|
|
57
60
|
|
|
61
|
+
TOR_TARGETS = [
|
|
62
|
+
"tor145",
|
|
63
|
+
].freeze
|
|
64
|
+
|
|
58
65
|
ALL_TARGETS = [
|
|
59
|
-
*EDGE_TARGETS,
|
|
60
66
|
*CHROME_TARGETS,
|
|
61
|
-
*
|
|
67
|
+
*EDGE_TARGETS,
|
|
62
68
|
*FIREFOX_TARGETS,
|
|
69
|
+
*SAFARI_TARGETS,
|
|
70
|
+
*TOR_TARGETS,
|
|
63
71
|
].freeze
|
|
64
72
|
|
|
65
73
|
ALIASES = {
|
|
@@ -69,6 +77,7 @@ module EthonImpersonate
|
|
|
69
77
|
"firefox" => FIREFOX_TARGETS.last,
|
|
70
78
|
"safari" => SAFARI_DESKTOP_TARGETS.last,
|
|
71
79
|
"safari_ios" => SAFARI_MOBILE_TARGETS.last,
|
|
80
|
+
"tor" => TOR_TARGETS.last,
|
|
72
81
|
}.freeze
|
|
73
82
|
|
|
74
83
|
BROWSERS = [
|
|
@@ -76,6 +85,7 @@ module EthonImpersonate
|
|
|
76
85
|
*EDGE_TARGETS,
|
|
77
86
|
*FIREFOX_TARGETS,
|
|
78
87
|
*SAFARI_TARGETS,
|
|
88
|
+
*TOR_TARGETS,
|
|
79
89
|
*ALIASES.keys,
|
|
80
90
|
].freeze
|
|
81
91
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ethon-impersonate
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.17.
|
|
4
|
+
version: 0.17.10
|
|
5
5
|
platform: arm64-darwin-24
|
|
6
6
|
authors:
|
|
7
7
|
- David Sojevic
|
|
8
8
|
- Hans Hasselberg
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-
|
|
11
|
+
date: 2025-07-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: ffi
|
|
@@ -98,7 +98,7 @@ files:
|
|
|
98
98
|
- lib/ethon_impersonate/multi/options.rb
|
|
99
99
|
- lib/ethon_impersonate/multi/stack.rb
|
|
100
100
|
- lib/ethon_impersonate/version.rb
|
|
101
|
-
homepage: https://github.com/
|
|
101
|
+
homepage: https://github.com/serpapi/ethon-impersonate
|
|
102
102
|
licenses:
|
|
103
103
|
- MIT
|
|
104
104
|
metadata: {}
|