wreq-rb 0.5.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 +19 -15
- data/ext/wreq_rb/Cargo.toml +4 -6
- data/ext/wreq_rb/src/client.rs +41 -48
- 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 +49 -71
- data/patches/0002-add-cancel-connections.patch +0 -181
- 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,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: wreq-rb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.5.
|
|
4
|
+
version: 0.5.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Yicheng Zhou
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
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
|
|
@@ -37,6 +37,7 @@ extra_rdoc_files: []
|
|
|
37
37
|
files:
|
|
38
38
|
- Cargo.lock
|
|
39
39
|
- Cargo.toml
|
|
40
|
+
- LICENSE
|
|
40
41
|
- README.md
|
|
41
42
|
- exe/wreq
|
|
42
43
|
- ext/wreq_rb/Cargo.toml
|
|
@@ -48,86 +49,44 @@ files:
|
|
|
48
49
|
- lib/wreq-rb.rb
|
|
49
50
|
- lib/wreq-rb/version.rb
|
|
50
51
|
- patches/0001-add-transfer-size-tracking.patch
|
|
51
|
-
- patches/0002-add-cancel-connections.patch
|
|
52
52
|
- vendor/wreq/Cargo.toml
|
|
53
53
|
- vendor/wreq/LICENSE
|
|
54
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
|
|
55
63
|
- vendor/wreq/examples/cert_store.rs
|
|
56
64
|
- vendor/wreq/examples/connect_via_lower_priority_tokio_runtime.rs
|
|
57
|
-
- vendor/wreq/examples/
|
|
65
|
+
- vendor/wreq/examples/emulate.rs
|
|
58
66
|
- vendor/wreq/examples/form.rs
|
|
59
67
|
- vendor/wreq/examples/http1_websocket.rs
|
|
60
68
|
- vendor/wreq/examples/http2_websocket.rs
|
|
61
69
|
- vendor/wreq/examples/json_dynamic.rs
|
|
62
70
|
- vendor/wreq/examples/json_typed.rs
|
|
63
71
|
- vendor/wreq/examples/keylog.rs
|
|
64
|
-
- vendor/wreq/examples/
|
|
72
|
+
- vendor/wreq/examples/request_with_emulate.rs
|
|
65
73
|
- vendor/wreq/examples/request_with_interface.rs
|
|
66
74
|
- vendor/wreq/examples/request_with_local_address.rs
|
|
67
75
|
- vendor/wreq/examples/request_with_proxy.rs
|
|
68
76
|
- vendor/wreq/examples/request_with_redirect.rs
|
|
69
77
|
- vendor/wreq/examples/request_with_version.rs
|
|
78
|
+
- vendor/wreq/examples/rt.rs
|
|
70
79
|
- vendor/wreq/examples/tor_socks.rs
|
|
71
80
|
- vendor/wreq/examples/unix_socket.rs
|
|
72
81
|
- vendor/wreq/src/client.rs
|
|
73
82
|
- vendor/wreq/src/client/body.rs
|
|
74
|
-
- vendor/wreq/src/client/
|
|
75
|
-
- vendor/wreq/src/client/
|
|
76
|
-
- vendor/wreq/src/client/conn/connector.rs
|
|
77
|
-
- vendor/wreq/src/client/conn/http.rs
|
|
78
|
-
- vendor/wreq/src/client/conn/proxy.rs
|
|
79
|
-
- vendor/wreq/src/client/conn/proxy/socks.rs
|
|
80
|
-
- vendor/wreq/src/client/conn/proxy/tunnel.rs
|
|
81
|
-
- vendor/wreq/src/client/conn/tls_info.rs
|
|
82
|
-
- vendor/wreq/src/client/conn/uds.rs
|
|
83
|
-
- vendor/wreq/src/client/conn/verbose.rs
|
|
84
|
-
- vendor/wreq/src/client/core.rs
|
|
85
|
-
- vendor/wreq/src/client/core/body.rs
|
|
86
|
-
- vendor/wreq/src/client/core/body/incoming.rs
|
|
87
|
-
- vendor/wreq/src/client/core/body/length.rs
|
|
88
|
-
- vendor/wreq/src/client/core/common.rs
|
|
89
|
-
- vendor/wreq/src/client/core/common/buf.rs
|
|
90
|
-
- vendor/wreq/src/client/core/common/rewind.rs
|
|
91
|
-
- vendor/wreq/src/client/core/common/watch.rs
|
|
92
|
-
- vendor/wreq/src/client/core/conn.rs
|
|
93
|
-
- vendor/wreq/src/client/core/conn/http1.rs
|
|
94
|
-
- vendor/wreq/src/client/core/conn/http2.rs
|
|
95
|
-
- vendor/wreq/src/client/core/dispatch.rs
|
|
96
|
-
- vendor/wreq/src/client/core/error.rs
|
|
97
|
-
- vendor/wreq/src/client/core/ext.rs
|
|
98
|
-
- vendor/wreq/src/client/core/http1.rs
|
|
99
|
-
- vendor/wreq/src/client/core/http2.rs
|
|
100
|
-
- vendor/wreq/src/client/core/proto.rs
|
|
101
|
-
- vendor/wreq/src/client/core/proto/h1.rs
|
|
102
|
-
- vendor/wreq/src/client/core/proto/h1/conn.rs
|
|
103
|
-
- vendor/wreq/src/client/core/proto/h1/decode.rs
|
|
104
|
-
- vendor/wreq/src/client/core/proto/h1/dispatch.rs
|
|
105
|
-
- vendor/wreq/src/client/core/proto/h1/encode.rs
|
|
106
|
-
- vendor/wreq/src/client/core/proto/h1/io.rs
|
|
107
|
-
- vendor/wreq/src/client/core/proto/h1/role.rs
|
|
108
|
-
- vendor/wreq/src/client/core/proto/h2.rs
|
|
109
|
-
- vendor/wreq/src/client/core/proto/h2/client.rs
|
|
110
|
-
- vendor/wreq/src/client/core/proto/h2/ping.rs
|
|
111
|
-
- vendor/wreq/src/client/core/proto/headers.rs
|
|
112
|
-
- vendor/wreq/src/client/core/rt.rs
|
|
113
|
-
- vendor/wreq/src/client/core/rt/bounds.rs
|
|
114
|
-
- vendor/wreq/src/client/core/rt/timer.rs
|
|
115
|
-
- vendor/wreq/src/client/core/rt/tokio.rs
|
|
116
|
-
- vendor/wreq/src/client/core/upgrade.rs
|
|
117
|
-
- vendor/wreq/src/client/emulation.rs
|
|
118
|
-
- vendor/wreq/src/client/http.rs
|
|
119
|
-
- vendor/wreq/src/client/http/client.rs
|
|
120
|
-
- vendor/wreq/src/client/http/client/error.rs
|
|
121
|
-
- vendor/wreq/src/client/http/client/exec.rs
|
|
122
|
-
- vendor/wreq/src/client/http/client/extra.rs
|
|
123
|
-
- vendor/wreq/src/client/http/client/lazy.rs
|
|
124
|
-
- vendor/wreq/src/client/http/client/pool.rs
|
|
125
|
-
- vendor/wreq/src/client/http/client/util.rs
|
|
126
|
-
- vendor/wreq/src/client/http/future.rs
|
|
83
|
+
- vendor/wreq/src/client/emulate.rs
|
|
84
|
+
- vendor/wreq/src/client/future.rs
|
|
127
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
|
|
128
89
|
- vendor/wreq/src/client/layer/config.rs
|
|
129
|
-
- vendor/wreq/src/client/layer/config/options.rs
|
|
130
|
-
- vendor/wreq/src/client/layer/cookie.rs
|
|
131
90
|
- vendor/wreq/src/client/layer/decoder.rs
|
|
132
91
|
- vendor/wreq/src/client/layer/redirect.rs
|
|
133
92
|
- vendor/wreq/src/client/layer/redirect/future.rs
|
|
@@ -141,18 +100,38 @@ files:
|
|
|
141
100
|
- vendor/wreq/src/client/multipart.rs
|
|
142
101
|
- vendor/wreq/src/client/request.rs
|
|
143
102
|
- vendor/wreq/src/client/response.rs
|
|
103
|
+
- vendor/wreq/src/client/upgrade.rs
|
|
144
104
|
- vendor/wreq/src/client/ws.rs
|
|
145
105
|
- vendor/wreq/src/client/ws/json.rs
|
|
146
106
|
- vendor/wreq/src/client/ws/message.rs
|
|
147
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
|
|
148
125
|
- vendor/wreq/src/cookie.rs
|
|
149
126
|
- vendor/wreq/src/dns.rs
|
|
150
127
|
- vendor/wreq/src/dns/gai.rs
|
|
128
|
+
- vendor/wreq/src/dns/gai/compio.rs
|
|
129
|
+
- vendor/wreq/src/dns/gai/tokio.rs
|
|
151
130
|
- vendor/wreq/src/dns/hickory.rs
|
|
152
131
|
- vendor/wreq/src/dns/resolve.rs
|
|
153
132
|
- vendor/wreq/src/error.rs
|
|
154
133
|
- vendor/wreq/src/ext.rs
|
|
155
|
-
- vendor/wreq/src/
|
|
134
|
+
- vendor/wreq/src/group.rs
|
|
156
135
|
- vendor/wreq/src/header.rs
|
|
157
136
|
- vendor/wreq/src/into_uri.rs
|
|
158
137
|
- vendor/wreq/src/lib.rs
|
|
@@ -163,21 +142,20 @@ files:
|
|
|
163
142
|
- vendor/wreq/src/proxy/win.rs
|
|
164
143
|
- vendor/wreq/src/redirect.rs
|
|
165
144
|
- vendor/wreq/src/retry.rs
|
|
145
|
+
- vendor/wreq/src/rt.rs
|
|
166
146
|
- vendor/wreq/src/sync.rs
|
|
167
147
|
- vendor/wreq/src/tls.rs
|
|
148
|
+
- vendor/wreq/src/tls/compress.rs
|
|
168
149
|
- vendor/wreq/src/tls/conn.rs
|
|
169
|
-
- vendor/wreq/src/tls/conn/cache.rs
|
|
170
|
-
- vendor/wreq/src/tls/conn/cert_compression.rs
|
|
171
150
|
- vendor/wreq/src/tls/conn/ext.rs
|
|
172
151
|
- vendor/wreq/src/tls/conn/macros.rs
|
|
173
152
|
- vendor/wreq/src/tls/conn/service.rs
|
|
174
153
|
- vendor/wreq/src/tls/keylog.rs
|
|
175
|
-
- vendor/wreq/src/tls/
|
|
176
|
-
- vendor/wreq/src/tls/
|
|
177
|
-
- vendor/wreq/src/tls/
|
|
178
|
-
- vendor/wreq/src/tls/
|
|
179
|
-
- vendor/wreq/src/tls/
|
|
180
|
-
- 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
|
|
181
159
|
- vendor/wreq/src/trace.rs
|
|
182
160
|
- vendor/wreq/src/util.rs
|
|
183
161
|
- vendor/wreq/tests/badssl.rs
|
|
@@ -186,7 +164,7 @@ files:
|
|
|
186
164
|
- vendor/wreq/tests/connector_layers.rs
|
|
187
165
|
- vendor/wreq/tests/cookie.rs
|
|
188
166
|
- vendor/wreq/tests/deflate.rs
|
|
189
|
-
- vendor/wreq/tests/
|
|
167
|
+
- vendor/wreq/tests/emulate.rs
|
|
190
168
|
- vendor/wreq/tests/gzip.rs
|
|
191
169
|
- vendor/wreq/tests/layers.rs
|
|
192
170
|
- vendor/wreq/tests/multipart.rs
|
|
@@ -204,7 +182,7 @@ files:
|
|
|
204
182
|
- vendor/wreq/tests/zstd.rs
|
|
205
183
|
homepage: https://github.com/serpapi/wreq-rb
|
|
206
184
|
licenses:
|
|
207
|
-
-
|
|
185
|
+
- Apache-2.0
|
|
208
186
|
metadata: {}
|
|
209
187
|
post_install_message:
|
|
210
188
|
rdoc_options: []
|