wreq-rb 0.4.0 → 0.5.1
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/Cargo.lock +1922 -397
- data/LICENSE +203 -0
- data/README.md +47 -16
- data/exe/wreq +211 -0
- data/ext/wreq_rb/Cargo.toml +4 -6
- data/ext/wreq_rb/src/client.rs +145 -41
- data/lib/wreq-rb/version.rb +1 -1
- data/patches/0001-add-transfer-size-tracking.patch +76 -67
- data/vendor/wreq/Cargo.toml +119 -71
- data/vendor/wreq/README.md +25 -20
- data/vendor/wreq/bench/http1.rs +25 -0
- data/vendor/wreq/bench/http1_over_tls.rs +25 -0
- data/vendor/wreq/bench/http2.rs +25 -0
- data/vendor/wreq/bench/http2_over_tls.rs +25 -0
- data/vendor/wreq/bench/support/bench.rs +91 -0
- data/vendor/wreq/bench/support/client.rs +217 -0
- data/vendor/wreq/bench/support/server.rs +188 -0
- data/vendor/wreq/bench/support.rs +56 -0
- data/vendor/wreq/examples/cert_store.rs +4 -4
- data/vendor/wreq/examples/{emulation.rs → emulate.rs} +2 -2
- data/vendor/wreq/examples/http2_websocket.rs +2 -2
- data/vendor/wreq/examples/keylog.rs +3 -3
- data/vendor/wreq/examples/{request_with_emulation.rs → request_with_emulate.rs} +2 -2
- data/vendor/wreq/examples/rt.rs +23 -0
- data/vendor/wreq/src/client/body.rs +23 -61
- data/vendor/wreq/src/client/emulate.rs +119 -0
- data/vendor/wreq/src/client/{http/future.rs → future.rs} +11 -32
- data/vendor/wreq/src/client/{http → layer}/client/pool.rs +66 -61
- data/vendor/wreq/src/client/{http → layer}/client.rs +416 -270
- data/vendor/wreq/src/client/layer/config.rs +27 -6
- data/vendor/wreq/src/client/layer/decoder.rs +9 -4
- data/vendor/wreq/src/client/layer/redirect/future.rs +6 -3
- data/vendor/wreq/src/client/layer/redirect.rs +4 -5
- data/vendor/wreq/src/client/layer/retry.rs +8 -5
- data/vendor/wreq/src/client/layer/timeout/body.rs +15 -6
- data/vendor/wreq/src/client/layer/timeout/future.rs +23 -18
- data/vendor/wreq/src/client/layer/timeout.rs +24 -74
- data/vendor/wreq/src/client/layer.rs +1 -2
- data/vendor/wreq/src/client/multipart.rs +137 -154
- data/vendor/wreq/src/client/request.rs +202 -118
- data/vendor/wreq/src/client/response.rs +46 -45
- data/vendor/wreq/src/client/upgrade.rs +15 -0
- data/vendor/wreq/src/client/ws.rs +73 -25
- data/vendor/wreq/src/client.rs +1655 -17
- data/vendor/wreq/src/config.rs +11 -11
- data/vendor/wreq/src/{client/conn → conn}/connector.rs +139 -137
- data/vendor/wreq/src/conn/descriptor.rs +143 -0
- data/vendor/wreq/src/conn/http.rs +484 -0
- data/vendor/wreq/src/conn/net/io.rs +75 -0
- data/vendor/wreq/src/conn/net/tcp/compio.rs +71 -0
- data/vendor/wreq/src/conn/net/tcp/tokio.rs +57 -0
- data/vendor/wreq/src/conn/net/tcp.rs +561 -0
- data/vendor/wreq/src/conn/net/uds/compio.rs +60 -0
- data/vendor/wreq/src/{client/conn/uds.rs → conn/net/uds/tokio.rs} +18 -12
- data/vendor/wreq/src/conn/net/uds.rs +11 -0
- data/vendor/wreq/src/conn/net.rs +130 -0
- data/vendor/wreq/src/{client/conn → conn}/proxy/socks.rs +2 -9
- data/vendor/wreq/src/{client/conn → conn}/proxy/tunnel.rs +21 -56
- data/vendor/wreq/src/conn/tls_info.rs +47 -0
- data/vendor/wreq/src/{client/conn.rs → conn.rs} +202 -54
- data/vendor/wreq/src/cookie.rs +302 -142
- data/vendor/wreq/src/dns/gai/compio.rs +77 -0
- data/vendor/wreq/src/dns/gai/tokio.rs +90 -0
- data/vendor/wreq/src/dns/gai.rs +14 -164
- data/vendor/wreq/src/dns/hickory.rs +16 -23
- data/vendor/wreq/src/dns/resolve.rs +7 -41
- data/vendor/wreq/src/dns.rs +90 -7
- data/vendor/wreq/src/error.rs +57 -31
- data/vendor/wreq/src/ext.rs +25 -0
- data/vendor/wreq/src/group.rs +211 -0
- data/vendor/wreq/src/header.rs +100 -112
- data/vendor/wreq/src/lib.rs +124 -73
- data/vendor/wreq/src/proxy.rs +6 -20
- data/vendor/wreq/src/redirect.rs +1 -1
- data/vendor/wreq/src/rt.rs +208 -0
- data/vendor/wreq/src/sync.rs +97 -98
- data/vendor/wreq/src/tls/compress.rs +124 -0
- data/vendor/wreq/src/tls/conn/ext.rs +54 -45
- data/vendor/wreq/src/tls/conn/service.rs +14 -18
- data/vendor/wreq/src/tls/conn.rs +169 -241
- data/vendor/wreq/src/tls/keylog.rs +68 -5
- data/vendor/wreq/src/tls/session.rs +205 -0
- data/vendor/wreq/src/tls/{x509 → trust}/identity.rs +4 -21
- data/vendor/wreq/src/tls/{x509/parser.rs → trust/parse.rs} +1 -1
- data/vendor/wreq/src/tls/{x509 → trust}/store.rs +42 -81
- data/vendor/wreq/src/tls/{x509.rs → trust.rs} +8 -2
- data/vendor/wreq/src/tls.rs +489 -25
- data/vendor/wreq/src/trace.rs +0 -12
- data/vendor/wreq/src/util.rs +1 -1
- data/vendor/wreq/tests/badssl.rs +10 -10
- data/vendor/wreq/tests/client.rs +3 -9
- data/vendor/wreq/tests/cookie.rs +6 -8
- data/vendor/wreq/tests/{emulation.rs → emulate.rs} +130 -22
- data/vendor/wreq/tests/multipart.rs +43 -1
- data/vendor/wreq/tests/proxy.rs +1 -1
- data/vendor/wreq/tests/support/layer.rs +1 -0
- metadata +53 -72
- data/vendor/wreq/src/client/conn/conn.rs +0 -231
- data/vendor/wreq/src/client/conn/http.rs +0 -1023
- data/vendor/wreq/src/client/conn/tls_info.rs +0 -98
- data/vendor/wreq/src/client/core/body/incoming.rs +0 -485
- data/vendor/wreq/src/client/core/body/length.rs +0 -118
- data/vendor/wreq/src/client/core/body.rs +0 -34
- data/vendor/wreq/src/client/core/common/buf.rs +0 -149
- data/vendor/wreq/src/client/core/common/rewind.rs +0 -141
- data/vendor/wreq/src/client/core/common/watch.rs +0 -76
- data/vendor/wreq/src/client/core/common.rs +0 -3
- data/vendor/wreq/src/client/core/conn/http1.rs +0 -342
- data/vendor/wreq/src/client/core/conn/http2.rs +0 -307
- data/vendor/wreq/src/client/core/conn.rs +0 -11
- data/vendor/wreq/src/client/core/dispatch.rs +0 -299
- data/vendor/wreq/src/client/core/error.rs +0 -435
- data/vendor/wreq/src/client/core/ext.rs +0 -201
- data/vendor/wreq/src/client/core/http1.rs +0 -178
- data/vendor/wreq/src/client/core/http2.rs +0 -483
- data/vendor/wreq/src/client/core/proto/h1/conn.rs +0 -988
- data/vendor/wreq/src/client/core/proto/h1/decode.rs +0 -1170
- data/vendor/wreq/src/client/core/proto/h1/dispatch.rs +0 -684
- data/vendor/wreq/src/client/core/proto/h1/encode.rs +0 -580
- data/vendor/wreq/src/client/core/proto/h1/io.rs +0 -879
- data/vendor/wreq/src/client/core/proto/h1/role.rs +0 -694
- data/vendor/wreq/src/client/core/proto/h1.rs +0 -104
- data/vendor/wreq/src/client/core/proto/h2/client.rs +0 -650
- data/vendor/wreq/src/client/core/proto/h2/ping.rs +0 -539
- data/vendor/wreq/src/client/core/proto/h2.rs +0 -379
- data/vendor/wreq/src/client/core/proto/headers.rs +0 -138
- data/vendor/wreq/src/client/core/proto.rs +0 -58
- data/vendor/wreq/src/client/core/rt/bounds.rs +0 -57
- data/vendor/wreq/src/client/core/rt/timer.rs +0 -150
- data/vendor/wreq/src/client/core/rt/tokio.rs +0 -99
- data/vendor/wreq/src/client/core/rt.rs +0 -25
- data/vendor/wreq/src/client/core/upgrade.rs +0 -267
- data/vendor/wreq/src/client/core.rs +0 -16
- data/vendor/wreq/src/client/emulation.rs +0 -161
- data/vendor/wreq/src/client/http/client/error.rs +0 -142
- data/vendor/wreq/src/client/http/client/exec.rs +0 -29
- data/vendor/wreq/src/client/http/client/extra.rs +0 -77
- data/vendor/wreq/src/client/http/client/util.rs +0 -104
- data/vendor/wreq/src/client/http.rs +0 -1629
- data/vendor/wreq/src/client/layer/config/options.rs +0 -156
- data/vendor/wreq/src/client/layer/cookie.rs +0 -161
- data/vendor/wreq/src/hash.rs +0 -143
- data/vendor/wreq/src/tls/conn/cache.rs +0 -123
- data/vendor/wreq/src/tls/conn/cert_compression.rs +0 -125
- data/vendor/wreq/src/tls/keylog/handle.rs +0 -64
- data/vendor/wreq/src/tls/options.rs +0 -464
- /data/vendor/wreq/src/client/{http → layer}/client/lazy.rs +0 -0
- /data/vendor/wreq/src/{client/conn → conn}/proxy.rs +0 -0
- /data/vendor/wreq/src/{client/conn → conn}/verbose.rs +0 -0
data/vendor/wreq/tests/cookie.rs
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
mod support;
|
|
2
|
-
use std::sync::Arc;
|
|
3
2
|
|
|
4
|
-
use http::header::COOKIE;
|
|
3
|
+
use http::{Version, header::COOKIE};
|
|
5
4
|
use support::server;
|
|
6
5
|
use wreq::{Client, cookie::Jar};
|
|
7
6
|
|
|
@@ -231,6 +230,7 @@ async fn cookie_request_level_compression() {
|
|
|
231
230
|
.body(Default::default())
|
|
232
231
|
.unwrap(),
|
|
233
232
|
"/default" | "/compressed" => {
|
|
233
|
+
assert_eq!(req.version(), Version::HTTP_11);
|
|
234
234
|
let cookies = req
|
|
235
235
|
.headers()
|
|
236
236
|
.get(COOKIE)
|
|
@@ -245,6 +245,7 @@ async fn cookie_request_level_compression() {
|
|
|
245
245
|
http::Response::default()
|
|
246
246
|
}
|
|
247
247
|
"/uncompressed" => {
|
|
248
|
+
assert_eq!(req.version(), Version::HTTP_2);
|
|
248
249
|
let cookies: Vec<_> = req
|
|
249
250
|
.headers()
|
|
250
251
|
.get_all(COOKIE)
|
|
@@ -265,12 +266,9 @@ async fn cookie_request_level_compression() {
|
|
|
265
266
|
|
|
266
267
|
let base_url = format!("http://{}", server.addr());
|
|
267
268
|
|
|
268
|
-
// Create a jar with compression enabled (default)
|
|
269
|
-
let jar = Arc::new(Jar::default());
|
|
270
|
-
|
|
271
269
|
// Create a client with this jar
|
|
272
270
|
let client = Client::builder()
|
|
273
|
-
.cookie_provider(
|
|
271
|
+
.cookie_provider(Jar::default())
|
|
274
272
|
.build()
|
|
275
273
|
.unwrap();
|
|
276
274
|
|
|
@@ -291,7 +289,7 @@ async fn cookie_request_level_compression() {
|
|
|
291
289
|
// Request with compressed cookies
|
|
292
290
|
client
|
|
293
291
|
.get(format!("{}/compressed", base_url))
|
|
294
|
-
.
|
|
292
|
+
.version(Version::HTTP_11)
|
|
295
293
|
.send()
|
|
296
294
|
.await
|
|
297
295
|
.unwrap();
|
|
@@ -299,7 +297,7 @@ async fn cookie_request_level_compression() {
|
|
|
299
297
|
// Request with uncompressed cookies
|
|
300
298
|
client
|
|
301
299
|
.get(format!("{}/uncompressed", base_url))
|
|
302
|
-
.
|
|
300
|
+
.version(Version::HTTP_2)
|
|
303
301
|
.send()
|
|
304
302
|
.await
|
|
305
303
|
.unwrap();
|
|
@@ -1,13 +1,105 @@
|
|
|
1
|
-
use std::
|
|
1
|
+
use std::{
|
|
2
|
+
io::{self, Write},
|
|
3
|
+
time::Duration,
|
|
4
|
+
};
|
|
2
5
|
|
|
6
|
+
use brotli::{CompressorWriter as BrotliEncoder, Decompressor as BrotliDecoder};
|
|
7
|
+
use flate2::{Compression, read::ZlibDecoder, write::ZlibEncoder};
|
|
3
8
|
use wreq::{
|
|
4
9
|
Client, Emulation,
|
|
5
10
|
http1::Http1Options,
|
|
6
11
|
http2::{
|
|
7
12
|
Http2Options, PseudoId, PseudoOrder, SettingId, SettingsOrder, StreamDependency, StreamId,
|
|
8
13
|
},
|
|
9
|
-
tls::{
|
|
14
|
+
tls::{
|
|
15
|
+
AlpnProtocol, ExtensionType, KeyShare, TlsOptions, TlsVersion,
|
|
16
|
+
compress::{CertificateCompressionAlgorithm, CertificateCompressor, Codec},
|
|
17
|
+
},
|
|
10
18
|
};
|
|
19
|
+
use zstd::stream::{Decoder as ZstdDecoder, Encoder as ZstdEncoder};
|
|
20
|
+
|
|
21
|
+
#[derive(Debug)]
|
|
22
|
+
struct BrotliCompressor {
|
|
23
|
+
q: u32,
|
|
24
|
+
lgwin: u32,
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
#[derive(Debug)]
|
|
28
|
+
struct ZlibCompressor;
|
|
29
|
+
|
|
30
|
+
#[derive(Debug)]
|
|
31
|
+
struct ZstdCompressor;
|
|
32
|
+
|
|
33
|
+
impl CertificateCompressor for BrotliCompressor {
|
|
34
|
+
fn compress(&self) -> Codec {
|
|
35
|
+
let q = self.q;
|
|
36
|
+
let lgwin = self.lgwin;
|
|
37
|
+
Codec::Dynamic(Box::new(move |input, output| {
|
|
38
|
+
let mut writer = BrotliEncoder::new(output, input.len(), q, lgwin);
|
|
39
|
+
writer.write_all(input)?;
|
|
40
|
+
writer.flush()?;
|
|
41
|
+
Ok(())
|
|
42
|
+
}))
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
fn decompress(&self) -> Codec {
|
|
46
|
+
Codec::Pointer(|input, output| {
|
|
47
|
+
let mut reader = BrotliDecoder::new(input, 4096);
|
|
48
|
+
io::copy(&mut reader, output)?;
|
|
49
|
+
Ok(())
|
|
50
|
+
})
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
fn algorithm(&self) -> CertificateCompressionAlgorithm {
|
|
54
|
+
CertificateCompressionAlgorithm::BROTLI
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
impl CertificateCompressor for ZlibCompressor {
|
|
59
|
+
fn compress(&self) -> Codec {
|
|
60
|
+
Codec::Pointer(|input, output| {
|
|
61
|
+
let mut encoder = ZlibEncoder::new(output, Compression::default());
|
|
62
|
+
encoder.write_all(input)?;
|
|
63
|
+
encoder.finish()?;
|
|
64
|
+
Ok(())
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
fn decompress(&self) -> Codec {
|
|
69
|
+
Codec::Pointer(|input, output| {
|
|
70
|
+
let mut reader = ZlibDecoder::new(input);
|
|
71
|
+
io::copy(&mut reader, output)?;
|
|
72
|
+
Ok(())
|
|
73
|
+
})
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
fn algorithm(&self) -> CertificateCompressionAlgorithm {
|
|
77
|
+
CertificateCompressionAlgorithm::ZLIB
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
impl CertificateCompressor for ZstdCompressor {
|
|
82
|
+
fn compress(&self) -> Codec {
|
|
83
|
+
Codec::Pointer(|input, output| {
|
|
84
|
+
let mut encoder = ZstdEncoder::new(output, 0)?;
|
|
85
|
+
encoder.write_all(input)?;
|
|
86
|
+
encoder.finish()?;
|
|
87
|
+
Ok(())
|
|
88
|
+
})
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
fn decompress(&self) -> Codec {
|
|
92
|
+
Codec::Pointer(|input, output| {
|
|
93
|
+
let mut reader = ZstdDecoder::new(input)?;
|
|
94
|
+
io::copy(&mut reader, output)?;
|
|
95
|
+
Ok(())
|
|
96
|
+
})
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
fn algorithm(&self) -> CertificateCompressionAlgorithm {
|
|
100
|
+
CertificateCompressionAlgorithm::ZSTD
|
|
101
|
+
}
|
|
102
|
+
}
|
|
11
103
|
|
|
12
104
|
macro_rules! join {
|
|
13
105
|
($sep:expr, $first:expr $(, $rest:expr)*) => {
|
|
@@ -69,10 +161,10 @@ fn tls_options_template() -> TlsOptions {
|
|
|
69
161
|
"ecdsa_secp521r1_sha512",
|
|
70
162
|
"ecdsa_sha1"
|
|
71
163
|
))
|
|
72
|
-
.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
164
|
+
.certificate_compressors(vec![
|
|
165
|
+
&ZlibCompressor as _,
|
|
166
|
+
&BrotliCompressor { q: 11, lgwin: 32 } as _,
|
|
167
|
+
&ZstdCompressor as _,
|
|
76
168
|
])
|
|
77
169
|
.alpn_protocols([AlpnProtocol::HTTP2, AlpnProtocol::HTTP1])
|
|
78
170
|
.record_size_limit(0x4001)
|
|
@@ -82,7 +174,11 @@ fn tls_options_template() -> TlsOptions {
|
|
|
82
174
|
.enable_signed_cert_timestamps(true)
|
|
83
175
|
.min_tls_version(TlsVersion::TLS_1_2)
|
|
84
176
|
.max_tls_version(TlsVersion::TLS_1_3)
|
|
85
|
-
.
|
|
177
|
+
.key_shares(vec![
|
|
178
|
+
KeyShare::X25519_MLKEM768,
|
|
179
|
+
KeyShare::X25519,
|
|
180
|
+
KeyShare::P256,
|
|
181
|
+
])
|
|
86
182
|
.preserve_tls13_cipher_list(true)
|
|
87
183
|
.aes_hw_override(true)
|
|
88
184
|
.random_aes_hw_override(true)
|
|
@@ -96,6 +192,7 @@ fn tls_options_template() -> TlsOptions {
|
|
|
96
192
|
ExtensionType::APPLICATION_LAYER_PROTOCOL_NEGOTIATION,
|
|
97
193
|
ExtensionType::STATUS_REQUEST,
|
|
98
194
|
ExtensionType::DELEGATED_CREDENTIAL,
|
|
195
|
+
ExtensionType::CERTIFICATE_TIMESTAMP,
|
|
99
196
|
ExtensionType::KEY_SHARE,
|
|
100
197
|
ExtensionType::SUPPORTED_VERSIONS,
|
|
101
198
|
ExtensionType::SIGNATURE_ALGORITHMS,
|
|
@@ -103,10 +200,19 @@ fn tls_options_template() -> TlsOptions {
|
|
|
103
200
|
ExtensionType::RECORD_SIZE_LIMIT,
|
|
104
201
|
ExtensionType::CERT_COMPRESSION,
|
|
105
202
|
ExtensionType::ENCRYPTED_CLIENT_HELLO,
|
|
203
|
+
ExtensionType::PADDING,
|
|
106
204
|
])
|
|
107
205
|
.build()
|
|
108
206
|
}
|
|
109
207
|
|
|
208
|
+
fn http1_options_template() -> Http1Options {
|
|
209
|
+
// HTTP/1 options config
|
|
210
|
+
Http1Options::builder()
|
|
211
|
+
.allow_obsolete_multiline_headers_in_responses(true)
|
|
212
|
+
.max_headers(100)
|
|
213
|
+
.build()
|
|
214
|
+
}
|
|
215
|
+
|
|
110
216
|
fn http2_options_template() -> Http2Options {
|
|
111
217
|
// HTTP/2 headers frame pseudo-header order
|
|
112
218
|
let headers_pseudo_order = PseudoOrder::builder()
|
|
@@ -145,18 +251,12 @@ fn http2_options_template() -> Http2Options {
|
|
|
145
251
|
}
|
|
146
252
|
|
|
147
253
|
fn emulation_template() -> Emulation {
|
|
148
|
-
//
|
|
149
|
-
let http1 = Http1Options::builder()
|
|
150
|
-
.allow_obsolete_multiline_headers_in_responses(true)
|
|
151
|
-
.max_headers(100)
|
|
152
|
-
.build();
|
|
153
|
-
|
|
154
|
-
// This provider encapsulates TLS, HTTP/1, HTTP/2, default headers, and original headers
|
|
254
|
+
// This provider encapsulates TLS, HTTP/1, HTTP/2
|
|
155
255
|
Emulation::builder()
|
|
156
256
|
.tls_options(tls_options_template())
|
|
157
|
-
.http1_options(
|
|
257
|
+
.http1_options(http1_options_template())
|
|
158
258
|
.http2_options(http2_options_template())
|
|
159
|
-
.build()
|
|
259
|
+
.build(Default::default())
|
|
160
260
|
}
|
|
161
261
|
|
|
162
262
|
#[tokio::test]
|
|
@@ -164,7 +264,7 @@ async fn test_emulation() -> wreq::Result<()> {
|
|
|
164
264
|
let client = Client::builder()
|
|
165
265
|
.emulation(emulation_template())
|
|
166
266
|
.connect_timeout(Duration::from_secs(10))
|
|
167
|
-
.
|
|
267
|
+
.tls_cert_verification(false)
|
|
168
268
|
.build()?;
|
|
169
269
|
|
|
170
270
|
let text = client
|
|
@@ -190,7 +290,7 @@ async fn test_emulation() -> wreq::Result<()> {
|
|
|
190
290
|
async fn test_request_with_emulation() -> wreq::Result<()> {
|
|
191
291
|
let client = Client::builder()
|
|
192
292
|
.connect_timeout(Duration::from_secs(10))
|
|
193
|
-
.
|
|
293
|
+
.tls_cert_verification(false)
|
|
194
294
|
.build()?;
|
|
195
295
|
|
|
196
296
|
let text = client
|
|
@@ -217,12 +317,16 @@ async fn test_request_with_emulation() -> wreq::Result<()> {
|
|
|
217
317
|
async fn test_request_with_emulation_tls() -> wreq::Result<()> {
|
|
218
318
|
let client = Client::builder()
|
|
219
319
|
.connect_timeout(Duration::from_secs(10))
|
|
220
|
-
.
|
|
320
|
+
.tls_cert_verification(false)
|
|
221
321
|
.build()?;
|
|
222
322
|
|
|
323
|
+
let emulation = Emulation::builder()
|
|
324
|
+
.tls_options(tls_options_template())
|
|
325
|
+
.build(Default::default());
|
|
326
|
+
|
|
223
327
|
let text = client
|
|
224
328
|
.get("https://tls.browserleaks.com/")
|
|
225
|
-
.emulation(
|
|
329
|
+
.emulation(emulation)
|
|
226
330
|
.send()
|
|
227
331
|
.await?
|
|
228
332
|
.text()
|
|
@@ -240,12 +344,16 @@ async fn test_request_with_emulation_tls() -> wreq::Result<()> {
|
|
|
240
344
|
async fn test_request_with_emulation_http2() -> wreq::Result<()> {
|
|
241
345
|
let client = Client::builder()
|
|
242
346
|
.connect_timeout(Duration::from_secs(10))
|
|
243
|
-
.
|
|
347
|
+
.tls_cert_verification(false)
|
|
244
348
|
.build()?;
|
|
245
349
|
|
|
350
|
+
let emulation = Emulation::builder()
|
|
351
|
+
.http2_options(http2_options_template())
|
|
352
|
+
.build(Default::default());
|
|
353
|
+
|
|
246
354
|
let text = client
|
|
247
355
|
.get("https://tls.browserleaks.com/")
|
|
248
|
-
.emulation(
|
|
356
|
+
.emulation(emulation)
|
|
249
357
|
.send()
|
|
250
358
|
.await?
|
|
251
359
|
.text()
|
|
@@ -51,6 +51,48 @@ async fn text_part() {
|
|
|
51
51
|
assert_eq!(res.status(), wreq::StatusCode::OK);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
#[tokio::test]
|
|
55
|
+
async fn text_part_with_custom_boundary() {
|
|
56
|
+
let _ = env_logger::try_init();
|
|
57
|
+
|
|
58
|
+
let form =
|
|
59
|
+
wreq::multipart::Form::with_boundary("----WebKitFormBoundary0123456789").text("foo", "bar");
|
|
60
|
+
|
|
61
|
+
let expected_body = "\
|
|
62
|
+
------WebKitFormBoundary0123456789\r\n\
|
|
63
|
+
Content-Disposition: form-data; name=\"foo\"\r\n\r\n\
|
|
64
|
+
bar\r\n\
|
|
65
|
+
------WebKitFormBoundary0123456789--\r\n\
|
|
66
|
+
";
|
|
67
|
+
|
|
68
|
+
let ct = "multipart/form-data; boundary=----WebKitFormBoundary0123456789";
|
|
69
|
+
|
|
70
|
+
let server = server::http(move |mut req| async move {
|
|
71
|
+
assert_eq!(req.method(), "POST");
|
|
72
|
+
assert_eq!(req.headers()["content-type"], ct);
|
|
73
|
+
assert_eq!(
|
|
74
|
+
req.headers()["content-length"],
|
|
75
|
+
expected_body.len().to_string()
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
let mut full: Vec<u8> = Vec::new();
|
|
79
|
+
while let Some(item) = req.body_mut().frame().await {
|
|
80
|
+
full.extend(&*item.unwrap().into_data().unwrap());
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
assert_eq!(full, expected_body.as_bytes());
|
|
84
|
+
|
|
85
|
+
http::Response::default()
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
let url = format!("http://{}/multipart/1", server.addr());
|
|
89
|
+
|
|
90
|
+
let res = wreq::post(&url).multipart(form).send().await.unwrap();
|
|
91
|
+
|
|
92
|
+
assert_eq!(res.uri(), url.as_str());
|
|
93
|
+
assert_eq!(res.status(), wreq::StatusCode::OK);
|
|
94
|
+
}
|
|
95
|
+
|
|
54
96
|
#[cfg(feature = "stream")]
|
|
55
97
|
#[tokio::test]
|
|
56
98
|
async fn stream_part() {
|
|
@@ -111,7 +153,7 @@ async fn stream_part() {
|
|
|
111
153
|
assert_eq!(res.status(), wreq::StatusCode::OK);
|
|
112
154
|
}
|
|
113
155
|
|
|
114
|
-
#[cfg(feature = "stream")]
|
|
156
|
+
#[cfg(all(feature = "tokio-rt", feature = "stream"))]
|
|
115
157
|
#[tokio::test]
|
|
116
158
|
async fn async_impl_file_part() {
|
|
117
159
|
let _ = env_logger::try_init();
|
data/vendor/wreq/tests/proxy.rs
CHANGED
metadata
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: wreq-rb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Yicheng Zhou
|
|
8
8
|
- Illia Zub
|
|
9
9
|
autorequire:
|
|
10
|
-
bindir:
|
|
10
|
+
bindir: exe
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2026-
|
|
12
|
+
date: 2026-06-09 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rb_sys
|
|
@@ -29,14 +29,17 @@ description: An ergonomic Ruby HTTP client powered by Rust's wreq library, featu
|
|
|
29
29
|
TLS fingerprint emulation (JA3/JA4), HTTP/2 support, cookie handling, proxy support,
|
|
30
30
|
and redirect policies.
|
|
31
31
|
email:
|
|
32
|
-
executables:
|
|
32
|
+
executables:
|
|
33
|
+
- wreq
|
|
33
34
|
extensions:
|
|
34
35
|
- ext/wreq_rb/extconf.rb
|
|
35
36
|
extra_rdoc_files: []
|
|
36
37
|
files:
|
|
37
38
|
- Cargo.lock
|
|
38
39
|
- Cargo.toml
|
|
40
|
+
- LICENSE
|
|
39
41
|
- README.md
|
|
42
|
+
- exe/wreq
|
|
40
43
|
- ext/wreq_rb/Cargo.toml
|
|
41
44
|
- ext/wreq_rb/extconf.rb
|
|
42
45
|
- ext/wreq_rb/src/client.rs
|
|
@@ -49,82 +52,41 @@ files:
|
|
|
49
52
|
- vendor/wreq/Cargo.toml
|
|
50
53
|
- vendor/wreq/LICENSE
|
|
51
54
|
- vendor/wreq/README.md
|
|
55
|
+
- vendor/wreq/bench/http1.rs
|
|
56
|
+
- vendor/wreq/bench/http1_over_tls.rs
|
|
57
|
+
- vendor/wreq/bench/http2.rs
|
|
58
|
+
- vendor/wreq/bench/http2_over_tls.rs
|
|
59
|
+
- vendor/wreq/bench/support.rs
|
|
60
|
+
- vendor/wreq/bench/support/bench.rs
|
|
61
|
+
- vendor/wreq/bench/support/client.rs
|
|
62
|
+
- vendor/wreq/bench/support/server.rs
|
|
52
63
|
- vendor/wreq/examples/cert_store.rs
|
|
53
64
|
- vendor/wreq/examples/connect_via_lower_priority_tokio_runtime.rs
|
|
54
|
-
- vendor/wreq/examples/
|
|
65
|
+
- vendor/wreq/examples/emulate.rs
|
|
55
66
|
- vendor/wreq/examples/form.rs
|
|
56
67
|
- vendor/wreq/examples/http1_websocket.rs
|
|
57
68
|
- vendor/wreq/examples/http2_websocket.rs
|
|
58
69
|
- vendor/wreq/examples/json_dynamic.rs
|
|
59
70
|
- vendor/wreq/examples/json_typed.rs
|
|
60
71
|
- vendor/wreq/examples/keylog.rs
|
|
61
|
-
- vendor/wreq/examples/
|
|
72
|
+
- vendor/wreq/examples/request_with_emulate.rs
|
|
62
73
|
- vendor/wreq/examples/request_with_interface.rs
|
|
63
74
|
- vendor/wreq/examples/request_with_local_address.rs
|
|
64
75
|
- vendor/wreq/examples/request_with_proxy.rs
|
|
65
76
|
- vendor/wreq/examples/request_with_redirect.rs
|
|
66
77
|
- vendor/wreq/examples/request_with_version.rs
|
|
78
|
+
- vendor/wreq/examples/rt.rs
|
|
67
79
|
- vendor/wreq/examples/tor_socks.rs
|
|
68
80
|
- vendor/wreq/examples/unix_socket.rs
|
|
69
81
|
- vendor/wreq/src/client.rs
|
|
70
82
|
- vendor/wreq/src/client/body.rs
|
|
71
|
-
- vendor/wreq/src/client/
|
|
72
|
-
- vendor/wreq/src/client/
|
|
73
|
-
- vendor/wreq/src/client/conn/connector.rs
|
|
74
|
-
- vendor/wreq/src/client/conn/http.rs
|
|
75
|
-
- vendor/wreq/src/client/conn/proxy.rs
|
|
76
|
-
- vendor/wreq/src/client/conn/proxy/socks.rs
|
|
77
|
-
- vendor/wreq/src/client/conn/proxy/tunnel.rs
|
|
78
|
-
- vendor/wreq/src/client/conn/tls_info.rs
|
|
79
|
-
- vendor/wreq/src/client/conn/uds.rs
|
|
80
|
-
- vendor/wreq/src/client/conn/verbose.rs
|
|
81
|
-
- vendor/wreq/src/client/core.rs
|
|
82
|
-
- vendor/wreq/src/client/core/body.rs
|
|
83
|
-
- vendor/wreq/src/client/core/body/incoming.rs
|
|
84
|
-
- vendor/wreq/src/client/core/body/length.rs
|
|
85
|
-
- vendor/wreq/src/client/core/common.rs
|
|
86
|
-
- vendor/wreq/src/client/core/common/buf.rs
|
|
87
|
-
- vendor/wreq/src/client/core/common/rewind.rs
|
|
88
|
-
- vendor/wreq/src/client/core/common/watch.rs
|
|
89
|
-
- vendor/wreq/src/client/core/conn.rs
|
|
90
|
-
- vendor/wreq/src/client/core/conn/http1.rs
|
|
91
|
-
- vendor/wreq/src/client/core/conn/http2.rs
|
|
92
|
-
- vendor/wreq/src/client/core/dispatch.rs
|
|
93
|
-
- vendor/wreq/src/client/core/error.rs
|
|
94
|
-
- vendor/wreq/src/client/core/ext.rs
|
|
95
|
-
- vendor/wreq/src/client/core/http1.rs
|
|
96
|
-
- vendor/wreq/src/client/core/http2.rs
|
|
97
|
-
- vendor/wreq/src/client/core/proto.rs
|
|
98
|
-
- vendor/wreq/src/client/core/proto/h1.rs
|
|
99
|
-
- vendor/wreq/src/client/core/proto/h1/conn.rs
|
|
100
|
-
- vendor/wreq/src/client/core/proto/h1/decode.rs
|
|
101
|
-
- vendor/wreq/src/client/core/proto/h1/dispatch.rs
|
|
102
|
-
- vendor/wreq/src/client/core/proto/h1/encode.rs
|
|
103
|
-
- vendor/wreq/src/client/core/proto/h1/io.rs
|
|
104
|
-
- vendor/wreq/src/client/core/proto/h1/role.rs
|
|
105
|
-
- vendor/wreq/src/client/core/proto/h2.rs
|
|
106
|
-
- vendor/wreq/src/client/core/proto/h2/client.rs
|
|
107
|
-
- vendor/wreq/src/client/core/proto/h2/ping.rs
|
|
108
|
-
- vendor/wreq/src/client/core/proto/headers.rs
|
|
109
|
-
- vendor/wreq/src/client/core/rt.rs
|
|
110
|
-
- vendor/wreq/src/client/core/rt/bounds.rs
|
|
111
|
-
- vendor/wreq/src/client/core/rt/timer.rs
|
|
112
|
-
- vendor/wreq/src/client/core/rt/tokio.rs
|
|
113
|
-
- vendor/wreq/src/client/core/upgrade.rs
|
|
114
|
-
- vendor/wreq/src/client/emulation.rs
|
|
115
|
-
- vendor/wreq/src/client/http.rs
|
|
116
|
-
- vendor/wreq/src/client/http/client.rs
|
|
117
|
-
- vendor/wreq/src/client/http/client/error.rs
|
|
118
|
-
- vendor/wreq/src/client/http/client/exec.rs
|
|
119
|
-
- vendor/wreq/src/client/http/client/extra.rs
|
|
120
|
-
- vendor/wreq/src/client/http/client/lazy.rs
|
|
121
|
-
- vendor/wreq/src/client/http/client/pool.rs
|
|
122
|
-
- vendor/wreq/src/client/http/client/util.rs
|
|
123
|
-
- vendor/wreq/src/client/http/future.rs
|
|
83
|
+
- vendor/wreq/src/client/emulate.rs
|
|
84
|
+
- vendor/wreq/src/client/future.rs
|
|
124
85
|
- vendor/wreq/src/client/layer.rs
|
|
86
|
+
- vendor/wreq/src/client/layer/client.rs
|
|
87
|
+
- vendor/wreq/src/client/layer/client/lazy.rs
|
|
88
|
+
- vendor/wreq/src/client/layer/client/pool.rs
|
|
125
89
|
- vendor/wreq/src/client/layer/config.rs
|
|
126
|
-
- vendor/wreq/src/client/layer/config/options.rs
|
|
127
|
-
- vendor/wreq/src/client/layer/cookie.rs
|
|
128
90
|
- vendor/wreq/src/client/layer/decoder.rs
|
|
129
91
|
- vendor/wreq/src/client/layer/redirect.rs
|
|
130
92
|
- vendor/wreq/src/client/layer/redirect/future.rs
|
|
@@ -138,18 +100,38 @@ files:
|
|
|
138
100
|
- vendor/wreq/src/client/multipart.rs
|
|
139
101
|
- vendor/wreq/src/client/request.rs
|
|
140
102
|
- vendor/wreq/src/client/response.rs
|
|
103
|
+
- vendor/wreq/src/client/upgrade.rs
|
|
141
104
|
- vendor/wreq/src/client/ws.rs
|
|
142
105
|
- vendor/wreq/src/client/ws/json.rs
|
|
143
106
|
- vendor/wreq/src/client/ws/message.rs
|
|
144
107
|
- vendor/wreq/src/config.rs
|
|
108
|
+
- vendor/wreq/src/conn.rs
|
|
109
|
+
- vendor/wreq/src/conn/connector.rs
|
|
110
|
+
- vendor/wreq/src/conn/descriptor.rs
|
|
111
|
+
- vendor/wreq/src/conn/http.rs
|
|
112
|
+
- vendor/wreq/src/conn/net.rs
|
|
113
|
+
- vendor/wreq/src/conn/net/io.rs
|
|
114
|
+
- vendor/wreq/src/conn/net/tcp.rs
|
|
115
|
+
- vendor/wreq/src/conn/net/tcp/compio.rs
|
|
116
|
+
- vendor/wreq/src/conn/net/tcp/tokio.rs
|
|
117
|
+
- vendor/wreq/src/conn/net/uds.rs
|
|
118
|
+
- vendor/wreq/src/conn/net/uds/compio.rs
|
|
119
|
+
- vendor/wreq/src/conn/net/uds/tokio.rs
|
|
120
|
+
- vendor/wreq/src/conn/proxy.rs
|
|
121
|
+
- vendor/wreq/src/conn/proxy/socks.rs
|
|
122
|
+
- vendor/wreq/src/conn/proxy/tunnel.rs
|
|
123
|
+
- vendor/wreq/src/conn/tls_info.rs
|
|
124
|
+
- vendor/wreq/src/conn/verbose.rs
|
|
145
125
|
- vendor/wreq/src/cookie.rs
|
|
146
126
|
- vendor/wreq/src/dns.rs
|
|
147
127
|
- vendor/wreq/src/dns/gai.rs
|
|
128
|
+
- vendor/wreq/src/dns/gai/compio.rs
|
|
129
|
+
- vendor/wreq/src/dns/gai/tokio.rs
|
|
148
130
|
- vendor/wreq/src/dns/hickory.rs
|
|
149
131
|
- vendor/wreq/src/dns/resolve.rs
|
|
150
132
|
- vendor/wreq/src/error.rs
|
|
151
133
|
- vendor/wreq/src/ext.rs
|
|
152
|
-
- vendor/wreq/src/
|
|
134
|
+
- vendor/wreq/src/group.rs
|
|
153
135
|
- vendor/wreq/src/header.rs
|
|
154
136
|
- vendor/wreq/src/into_uri.rs
|
|
155
137
|
- vendor/wreq/src/lib.rs
|
|
@@ -160,21 +142,20 @@ files:
|
|
|
160
142
|
- vendor/wreq/src/proxy/win.rs
|
|
161
143
|
- vendor/wreq/src/redirect.rs
|
|
162
144
|
- vendor/wreq/src/retry.rs
|
|
145
|
+
- vendor/wreq/src/rt.rs
|
|
163
146
|
- vendor/wreq/src/sync.rs
|
|
164
147
|
- vendor/wreq/src/tls.rs
|
|
148
|
+
- vendor/wreq/src/tls/compress.rs
|
|
165
149
|
- vendor/wreq/src/tls/conn.rs
|
|
166
|
-
- vendor/wreq/src/tls/conn/cache.rs
|
|
167
|
-
- vendor/wreq/src/tls/conn/cert_compression.rs
|
|
168
150
|
- vendor/wreq/src/tls/conn/ext.rs
|
|
169
151
|
- vendor/wreq/src/tls/conn/macros.rs
|
|
170
152
|
- vendor/wreq/src/tls/conn/service.rs
|
|
171
153
|
- vendor/wreq/src/tls/keylog.rs
|
|
172
|
-
- vendor/wreq/src/tls/
|
|
173
|
-
- vendor/wreq/src/tls/
|
|
174
|
-
- vendor/wreq/src/tls/
|
|
175
|
-
- vendor/wreq/src/tls/
|
|
176
|
-
- vendor/wreq/src/tls/
|
|
177
|
-
- vendor/wreq/src/tls/x509/store.rs
|
|
154
|
+
- vendor/wreq/src/tls/session.rs
|
|
155
|
+
- vendor/wreq/src/tls/trust.rs
|
|
156
|
+
- vendor/wreq/src/tls/trust/identity.rs
|
|
157
|
+
- vendor/wreq/src/tls/trust/parse.rs
|
|
158
|
+
- vendor/wreq/src/tls/trust/store.rs
|
|
178
159
|
- vendor/wreq/src/trace.rs
|
|
179
160
|
- vendor/wreq/src/util.rs
|
|
180
161
|
- vendor/wreq/tests/badssl.rs
|
|
@@ -183,7 +164,7 @@ files:
|
|
|
183
164
|
- vendor/wreq/tests/connector_layers.rs
|
|
184
165
|
- vendor/wreq/tests/cookie.rs
|
|
185
166
|
- vendor/wreq/tests/deflate.rs
|
|
186
|
-
- vendor/wreq/tests/
|
|
167
|
+
- vendor/wreq/tests/emulate.rs
|
|
187
168
|
- vendor/wreq/tests/gzip.rs
|
|
188
169
|
- vendor/wreq/tests/layers.rs
|
|
189
170
|
- vendor/wreq/tests/multipart.rs
|
|
@@ -201,7 +182,7 @@ files:
|
|
|
201
182
|
- vendor/wreq/tests/zstd.rs
|
|
202
183
|
homepage: https://github.com/serpapi/wreq-rb
|
|
203
184
|
licenses:
|
|
204
|
-
-
|
|
185
|
+
- Apache-2.0
|
|
205
186
|
metadata: {}
|
|
206
187
|
post_install_message:
|
|
207
188
|
rdoc_options: []
|