Struct UserAgentEmulateService
pub struct UserAgentEmulateService<S, P> { /* private fields */ }
Expand description
Service to select a [UserAgentProfile
] and inject its info into the input Context
.
Note that actual http emulation is done by also ensuring a service
such as UserAgentEmulateHttpRequestModifier
and UserAgentEmulateHttpConnectModifier
is in use within your connector stack.
Tls emulation is facilitated by a tls client connector which respects
the injected (tls) client profile.
See the implementation ofEasyHttpWebClient
for the reference implementation of how
one can make use of this profile to emulate a user agent on the tls layer.
Implementations§
§impl<S, P> UserAgentEmulateService<S, P>
impl<S, P> UserAgentEmulateService<S, P>
pub fn new(inner: S, provider: P) -> UserAgentEmulateService<S, P>
pub fn new(inner: S, provider: P) -> UserAgentEmulateService<S, P>
Create a new UserAgentEmulateService
with the given inner service and provider.
Provider is implicitly expected to be a UserAgentProvider
.
pub fn optional(self, optional: bool) -> UserAgentEmulateService<S, P>
pub fn optional(self, optional: bool) -> UserAgentEmulateService<S, P>
When no user agent profile was found it will fail the request unless optional is true. In case of the latter the service will do nothing.
pub fn set_optional(
&mut self,
optional: bool,
) -> &mut UserAgentEmulateService<S, P>
pub fn set_optional( &mut self, optional: bool, ) -> &mut UserAgentEmulateService<S, P>
See Self::optional
.
pub fn try_auto_detect_user_agent(
self,
try_auto_detect_user_agent: bool,
) -> UserAgentEmulateService<S, P>
pub fn try_auto_detect_user_agent( self, try_auto_detect_user_agent: bool, ) -> UserAgentEmulateService<S, P>
If true, the service will try to auto-detect the user agent from the request, but only in case that info is not yet found in the context.
pub fn set_try_auto_detect_user_agent(
&mut self,
try_auto_detect_user_agent: bool,
) -> &mut UserAgentEmulateService<S, P>
pub fn set_try_auto_detect_user_agent( &mut self, try_auto_detect_user_agent: bool, ) -> &mut UserAgentEmulateService<S, P>
pub fn input_header_order(
self,
name: HeaderName,
) -> UserAgentEmulateService<S, P>
pub fn input_header_order( self, name: HeaderName, ) -> UserAgentEmulateService<S, P>
Define a header that if present is to contain a CSV header name list, that allows you to define the desired header order for the (extra) headers found in the input (http) request.
Extra meaning any headers not considered a base header and already defined by the (selected) User Agent Profile.
This can be useful because your http client might not respect the header casing and/or order of the headers taken together. Using this metadata allows you to communicate this data through anyway. If however your http client does respect casing and order, or you don’t care about some of it, you might not need it.
pub fn set_input_header_order(
&mut self,
name: HeaderName,
) -> &mut UserAgentEmulateService<S, P>
pub fn set_input_header_order( &mut self, name: HeaderName, ) -> &mut UserAgentEmulateService<S, P>
pub fn select_fallback(
self,
fb: UserAgentSelectFallback,
) -> UserAgentEmulateService<S, P>
pub fn select_fallback( self, fb: UserAgentSelectFallback, ) -> UserAgentEmulateService<S, P>
Choose what to do in case no profile could be selected using the regular pre-conditions as specified by the provider.
pub fn set_select_fallback(
&mut self,
fb: UserAgentSelectFallback,
) -> &mut UserAgentEmulateService<S, P>
pub fn set_select_fallback( &mut self, fb: UserAgentSelectFallback, ) -> &mut UserAgentEmulateService<S, P>
Trait Implementations§
§impl<S, P> Clone for UserAgentEmulateService<S, P>
impl<S, P> Clone for UserAgentEmulateService<S, P>
§fn clone(&self) -> UserAgentEmulateService<S, P>
fn clone(&self) -> UserAgentEmulateService<S, P>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl<S, P> Debug for UserAgentEmulateService<S, P>
impl<S, P> Debug for UserAgentEmulateService<S, P>
§impl<Body, S, P> Service<Request<Body>> for UserAgentEmulateService<S, P>
impl<Body, S, P> Service<Request<Body>> for UserAgentEmulateService<S, P>
§type Response = <S as Service<Request<Body>>>::Response
type Response = <S as Service<Request<Body>>>::Response
§async fn serve(
&self,
ctx: Context,
req: Request<Body>,
) -> Result<<UserAgentEmulateService<S, P> as Service<Request<Body>>>::Response, <UserAgentEmulateService<S, P> as Service<Request<Body>>>::Error>
async fn serve( &self, ctx: Context, req: Request<Body>, ) -> Result<<UserAgentEmulateService<S, P> as Service<Request<Body>>>::Response, <UserAgentEmulateService<S, P> as Service<Request<Body>>>::Error>
§fn boxed(self) -> BoxService<Request, Self::Response, Self::Error>
fn boxed(self) -> BoxService<Request, Self::Response, Self::Error>
Auto Trait Implementations§
impl<S, P> !Freeze for UserAgentEmulateService<S, P>
impl<S, P> RefUnwindSafe for UserAgentEmulateService<S, P>where
S: RefUnwindSafe,
P: RefUnwindSafe,
impl<S, P> Send for UserAgentEmulateService<S, P>
impl<S, P> Sync for UserAgentEmulateService<S, P>
impl<S, P> Unpin for UserAgentEmulateService<S, P>
impl<S, P> UnwindSafe for UserAgentEmulateService<S, P>where
S: UnwindSafe,
P: UnwindSafe,
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<S, Request, Connection> ConnectorService<Request> for S
impl<S, Request, Connection> ConnectorService<Request> for S
§type Connection = Connection
type Connection = Connection
ConnectorService
§fn connect(
&self,
ctx: Context,
req: Request,
) -> impl Future<Output = Result<EstablishedClientConnection<<S as ConnectorService<Request>>::Connection, Request>, <S as ConnectorService<Request>>::Error>> + Send
fn connect( &self, ctx: Context, req: Request, ) -> impl Future<Output = Result<EstablishedClientConnection<<S as ConnectorService<Request>>::Connection, Request>, <S as ConnectorService<Request>>::Error>> + Send
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<S, Body> HttpClientExt for S
impl<S, Body> HttpClientExt for S
§type ExecuteResponse = Response<Body>
type ExecuteResponse = Response<Body>
execute
method.§type ExecuteError = <S as Service<Request<Body>>>::Error
type ExecuteError = <S as Service<Request<Body>>>::Error
execute
method.§fn get(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn get( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
GET
request to a URL. Read more§fn post(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn post( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
POST
request to a URL. Read more§fn put(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn put( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
PUT
request to a URL. Read more§fn patch(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn patch( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
PATCH
request to a URL. Read more§fn delete(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn delete( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
DELETE
request to a URL. Read more§fn head(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn head( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
HEAD
request to a URL. Read more§fn connect(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn connect( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
CONNECT
request to a URL. Read more§fn request(
&self,
method: Method,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn request( &self, method: Method, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
§fn build_from_request<RequestBody>(
&self,
request: Request<RequestBody>,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn build_from_request<RequestBody>( &self, request: Request<RequestBody>, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
§fn execute(
&self,
ctx: Context,
request: Request<Body>,
) -> impl Future<Output = Result<<S as HttpClientExt>::ExecuteResponse, <S as HttpClientExt>::ExecuteError>>
fn execute( &self, ctx: Context, request: Request<Body>, ) -> impl Future<Output = Result<<S as HttpClientExt>::ExecuteResponse, <S as HttpClientExt>::ExecuteError>>
Request
. Read more§impl<S, Body> HttpClientWebSocketExt<Body> for S
impl<S, Body> HttpClientWebSocketExt<Body> for S
§fn websocket(
&self,
url: impl IntoUrl,
) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
fn websocket( &self, url: impl IntoUrl, ) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
WebSocketRequestBuilder
] to be used to establish a WebSocket connection over http/1.1.§fn websocket_h2(
&self,
url: impl IntoUrl,
) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
fn websocket_h2( &self, url: impl IntoUrl, ) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
WebSocketRequestBuilder
to be used to establish a WebSocket connection over h2.§fn websocket_with_request<RequestBody>(
&self,
req: Request<RequestBody>,
) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
fn websocket_with_request<RequestBody>( &self, req: Request<RequestBody>, ) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
WebSocketRequestBuilder
starting from the given request. Read more§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§fn and<P, B, E>(self, other: P) -> And<T, P>
fn and<P, B, E>(self, other: P) -> And<T, P>
Policy
that returns Action::Follow
only if self
and other
return
Action::Follow
. Read more