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
|
@@ -13,6 +13,7 @@ use std::{
|
|
|
13
13
|
task::{Context, Poll, ready},
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
+
use bytes::Bytes;
|
|
16
17
|
use futures_util::{Sink, SinkExt, Stream, StreamExt, stream::FusedStream};
|
|
17
18
|
use http::{
|
|
18
19
|
HeaderMap, HeaderName, HeaderValue, Method, StatusCode, Uri, Version, header, uri::Scheme,
|
|
@@ -25,10 +26,8 @@ use tokio_tungstenite::tungstenite::{
|
|
|
25
26
|
};
|
|
26
27
|
|
|
27
28
|
use self::message::{CloseCode, Message, Utf8Bytes};
|
|
28
|
-
use
|
|
29
|
-
|
|
30
|
-
proxy::Proxy,
|
|
31
|
-
};
|
|
29
|
+
use super::{emulate::IntoEmulation, request::RequestBuilder, response::Response};
|
|
30
|
+
use crate::{Error, Upgraded, header::OrigHeaderMap, proxy::Proxy};
|
|
32
31
|
|
|
33
32
|
/// A WebSocket stream.
|
|
34
33
|
type WebSocketStream = tokio_tungstenite::WebSocketStream<Upgraded>;
|
|
@@ -73,20 +72,27 @@ impl WebSocketRequestBuilder {
|
|
|
73
72
|
self
|
|
74
73
|
}
|
|
75
74
|
|
|
76
|
-
///
|
|
75
|
+
/// Set HTTP version
|
|
76
|
+
///
|
|
77
|
+
/// Configures the HTTP version used for the WebSocket handshake.
|
|
78
|
+
/// Defaults to HTTP/1.1.
|
|
79
|
+
///
|
|
80
|
+
/// # HTTP/1.1 (default)
|
|
77
81
|
///
|
|
78
|
-
///
|
|
79
|
-
///
|
|
80
|
-
///
|
|
82
|
+
/// - Uses the standard `Upgrade: websocket` mechanism (RFC 6455)
|
|
83
|
+
/// - Sends an HTTP `GET` request with `Connection: Upgrade` and `Upgrade: websocket` headers
|
|
84
|
+
/// - Widely supported by servers
|
|
81
85
|
///
|
|
82
|
-
/// #
|
|
86
|
+
/// # HTTP/2
|
|
83
87
|
///
|
|
84
|
-
/// - Uses
|
|
85
|
-
/// -
|
|
86
|
-
///
|
|
88
|
+
/// - Uses the Extended CONNECT Protocol (RFC 8441)
|
|
89
|
+
/// - Sends a `CONNECT` request with the `:protocol: websocket` pseudo-header instead of the
|
|
90
|
+
/// traditional upgrade mechanism
|
|
91
|
+
/// - Requires explicit server support for HTTP/2 WebSocket connections
|
|
92
|
+
/// - Will fail if the server does not support HTTP/2 WebSocket upgrade
|
|
87
93
|
#[inline]
|
|
88
|
-
pub fn
|
|
89
|
-
self.inner = self.inner.version(
|
|
94
|
+
pub fn version(mut self, version: Version) -> Self {
|
|
95
|
+
self.inner = self.inner.version(version);
|
|
90
96
|
self
|
|
91
97
|
}
|
|
92
98
|
|
|
@@ -315,8 +321,38 @@ impl WebSocketRequestBuilder {
|
|
|
315
321
|
self
|
|
316
322
|
}
|
|
317
323
|
|
|
318
|
-
///
|
|
319
|
-
|
|
324
|
+
/// Bind connections only on the specified network interface.
|
|
325
|
+
///
|
|
326
|
+
/// This option is only available on the following operating systems:
|
|
327
|
+
///
|
|
328
|
+
/// - Android
|
|
329
|
+
/// - Fuchsia
|
|
330
|
+
/// - Linux,
|
|
331
|
+
/// - macOS and macOS-like systems (iOS, tvOS, watchOS and visionOS)
|
|
332
|
+
/// - Solaris and illumos
|
|
333
|
+
///
|
|
334
|
+
/// On Android, Linux, and Fuchsia, this uses the
|
|
335
|
+
/// [`SO_BINDTODEVICE`][man-7-socket] socket option. On macOS and macOS-like
|
|
336
|
+
/// systems, Solaris, and illumos, this instead uses the [`IP_BOUND_IF` and
|
|
337
|
+
/// `IPV6_BOUND_IF`][man-7p-ip] socket options (as appropriate).
|
|
338
|
+
///
|
|
339
|
+
/// Note that connections will fail if the provided interface name is not a
|
|
340
|
+
/// network interface that currently exists when a connection is established.
|
|
341
|
+
///
|
|
342
|
+
/// # Example
|
|
343
|
+
///
|
|
344
|
+
/// ```
|
|
345
|
+
/// # fn doc() -> Result<(), wreq::Error> {
|
|
346
|
+
/// let interface = "lo";
|
|
347
|
+
/// let client = wreq::Client::builder()
|
|
348
|
+
/// .interface(interface)
|
|
349
|
+
/// .build()?;
|
|
350
|
+
/// # Ok(())
|
|
351
|
+
/// # }
|
|
352
|
+
/// ```
|
|
353
|
+
///
|
|
354
|
+
/// [man-7-socket]: https://man7.org/linux/man-pages/man7/socket.7.html
|
|
355
|
+
/// [man-7p-ip]: https://docs.oracle.com/cd/E86824_01/html/E54777/ip-7p.html
|
|
320
356
|
#[cfg(any(
|
|
321
357
|
target_os = "android",
|
|
322
358
|
target_os = "fuchsia",
|
|
@@ -352,13 +388,19 @@ impl WebSocketRequestBuilder {
|
|
|
352
388
|
self
|
|
353
389
|
}
|
|
354
390
|
|
|
355
|
-
///
|
|
391
|
+
/// Sets the request builder to emulation the specified HTTP context.
|
|
392
|
+
///
|
|
393
|
+
/// This method sets the necessary headers, HTTP/1 and HTTP/2 options configurations, and TLS
|
|
394
|
+
/// options config to use the specified HTTP context. It allows the client to mimic the
|
|
395
|
+
/// behavior of different versions or setups, which can be useful for testing or ensuring
|
|
396
|
+
/// compatibility with various environments.
|
|
397
|
+
///
|
|
398
|
+
/// # Note
|
|
399
|
+
/// This will overwrite the existing configuration.
|
|
400
|
+
/// You must set emulation before you can perform subsequent HTTP1/HTTP2/TLS fine-tuning.
|
|
356
401
|
#[inline]
|
|
357
|
-
pub fn emulation<
|
|
358
|
-
|
|
359
|
-
P: EmulationFactory,
|
|
360
|
-
{
|
|
361
|
-
self.inner = self.inner.emulation(factory);
|
|
402
|
+
pub fn emulation<T: IntoEmulation>(mut self, emulation: T) -> Self {
|
|
403
|
+
self.inner = self.inner.emulation(emulation);
|
|
362
404
|
self
|
|
363
405
|
}
|
|
364
406
|
|
|
@@ -436,7 +478,8 @@ impl WebSocketRequestBuilder {
|
|
|
436
478
|
|
|
437
479
|
request.headers_mut().insert(
|
|
438
480
|
header::SEC_WEBSOCKET_PROTOCOL,
|
|
439
|
-
|
|
481
|
+
HeaderValue::from_maybe_shared(Bytes::from(subprotocols))
|
|
482
|
+
.map_err(Error::builder)?,
|
|
440
483
|
);
|
|
441
484
|
}
|
|
442
485
|
}
|
|
@@ -561,9 +604,8 @@ impl WebSocketResponse {
|
|
|
561
604
|
(None, None) => {}
|
|
562
605
|
};
|
|
563
606
|
|
|
564
|
-
let upgraded = self.inner.upgrade().await?;
|
|
565
607
|
let inner = WebSocketStream::from_raw_socket(
|
|
566
|
-
|
|
608
|
+
self.inner.upgrade().await?,
|
|
567
609
|
protocol::Role::Client,
|
|
568
610
|
Some(self.config),
|
|
569
611
|
)
|
|
@@ -634,6 +676,12 @@ impl WebSocket {
|
|
|
634
676
|
.map_err(Error::websocket)
|
|
635
677
|
}
|
|
636
678
|
|
|
679
|
+
/// Consumes the [`WebSocket`] and returns the underlying stream.
|
|
680
|
+
#[inline]
|
|
681
|
+
pub fn into_inner(self) -> Upgraded {
|
|
682
|
+
self.inner.into_inner()
|
|
683
|
+
}
|
|
684
|
+
|
|
637
685
|
/// Closes the connection with a given code and (optional) reason.
|
|
638
686
|
pub async fn close<C, R>(mut self, code: C, reason: R) -> Result<(), Error>
|
|
639
687
|
where
|