pub struct HttpClient { /* private fields */ }Expand description
HTTP client with allowlist-based access control.
§Security Features
- URL allowlist enforcement
- Response size limits to prevent memory exhaustion
- Configurable timeouts to prevent hanging
- No automatic redirect following (to prevent allowlist bypass)
Implementations§
Source§impl HttpClient
impl HttpClient
Sourcepub fn new(allowlist: NetworkAllowlist) -> Self
pub fn new(allowlist: NetworkAllowlist) -> Self
Create a new HTTP client with the given allowlist.
Uses default security settings:
- 30 second timeout
- 10 MB max response size
- No automatic redirects
Sourcepub fn with_timeout(allowlist: NetworkAllowlist, timeout: Duration) -> Self
pub fn with_timeout(allowlist: NetworkAllowlist, timeout: Duration) -> Self
Create a client with custom timeout.
Sourcepub fn with_config(
allowlist: NetworkAllowlist,
timeout: Duration,
max_response_bytes: usize,
) -> Self
pub fn with_config( allowlist: NetworkAllowlist, timeout: Duration, max_response_bytes: usize, ) -> Self
Create a client with full configuration.
§Arguments
allowlist- URL patterns to allowtimeout- Request timeout durationmax_response_bytes- Maximum response body size (prevents memory exhaustion)
Sourcepub fn set_handler(&mut self, handler: Box<dyn HttpHandler>)
pub fn set_handler(&mut self, handler: Box<dyn HttpHandler>)
Set a custom HTTP handler for request interception.
The handler is called after the URL allowlist check, so the security boundary stays in bashkit. The default reqwest-based handler is used when no custom handler is set.
Sourcepub fn set_bot_auth(&mut self, config: BotAuthConfig)
pub fn set_bot_auth(&mut self, config: BotAuthConfig)
Enable bot-auth request signing.
When set, all outbound HTTP requests are transparently signed with Ed25519 per RFC 9421 / web-bot-auth profile. No CLI arguments needed. Signing failures are non-blocking — the request is sent unsigned.
Sourcepub fn set_before_http(&mut self, hooks: Vec<Interceptor<HttpRequestEvent>>)
pub fn set_before_http(&mut self, hooks: Vec<Interceptor<HttpRequestEvent>>)
Set before_http interceptor hooks.
Hooks fire before each HTTP request (after allowlist check). They can inspect, modify, or cancel the request.
Sourcepub fn set_after_http(&mut self, hooks: Vec<Interceptor<HttpResponseEvent>>)
pub fn set_after_http(&mut self, hooks: Vec<Interceptor<HttpResponseEvent>>)
Set after_http interceptor hooks.
Hooks fire after each HTTP response is received. They can inspect or modify the response metadata.
Sourcepub async fn post(&self, url: &str, body: Option<&[u8]>) -> Result<Response>
pub async fn post(&self, url: &str, body: Option<&[u8]>) -> Result<Response>
Make a POST request with optional body.
Sourcepub async fn put(&self, url: &str, body: Option<&[u8]>) -> Result<Response>
pub async fn put(&self, url: &str, body: Option<&[u8]>) -> Result<Response>
Make a PUT request with optional body.
Sourcepub async fn request(
&self,
method: Method,
url: &str,
body: Option<&[u8]>,
) -> Result<Response>
pub async fn request( &self, method: Method, url: &str, body: Option<&[u8]>, ) -> Result<Response>
Make an HTTP request.
Sourcepub async fn request_with_headers(
&self,
method: Method,
url: &str,
body: Option<&[u8]>,
headers: &[(String, String)],
) -> Result<Response>
pub async fn request_with_headers( &self, method: Method, url: &str, body: Option<&[u8]>, headers: &[(String, String)], ) -> Result<Response>
Make an HTTP request with custom headers.
§Security
- URL is validated against the allowlist before making the request
- Response body is limited to
max_response_bytesto prevent memory exhaustion - Redirects are not automatically followed (to prevent allowlist bypass)
Sourcepub async fn head(&self, url: &str) -> Result<Response>
pub async fn head(&self, url: &str) -> Result<Response>
Make a HEAD request to get headers without body.
Sourcepub fn max_response_bytes(&self) -> usize
pub fn max_response_bytes(&self) -> usize
Get the maximum response size in bytes.
Sourcepub async fn request_with_timeout(
&self,
method: Method,
url: &str,
body: Option<&[u8]>,
headers: &[(String, String)],
timeout_secs: Option<u64>,
) -> Result<Response>
pub async fn request_with_timeout( &self, method: Method, url: &str, body: Option<&[u8]>, headers: &[(String, String)], timeout_secs: Option<u64>, ) -> Result<Response>
Make an HTTP request with custom headers and per-request timeout.
This creates a temporary client with the specified timeout for this request only. If timeout_secs is None, uses the default client timeout.
§Arguments
method- HTTP methodurl- Request URLbody- Optional request bodyheaders- Custom headerstimeout_secs- Overall request timeout in seconds (curl –max-time)
§Security
- URL is validated against the allowlist before making the request
- Response body is limited to
max_response_bytesto prevent memory exhaustion - Redirects are not automatically followed (to prevent allowlist bypass)
Sourcepub async fn request_with_timeouts(
&self,
method: Method,
url: &str,
body: Option<&[u8]>,
headers: &[(String, String)],
timeout_secs: Option<u64>,
connect_timeout_secs: Option<u64>,
) -> Result<Response>
pub async fn request_with_timeouts( &self, method: Method, url: &str, body: Option<&[u8]>, headers: &[(String, String)], timeout_secs: Option<u64>, connect_timeout_secs: Option<u64>, ) -> Result<Response>
Make an HTTP request with custom headers and separate connect/request timeouts.
This creates a temporary client with the specified timeouts for this request only.
§Arguments
method- HTTP methodurl- Request URLbody- Optional request bodyheaders- Custom headerstimeout_secs- Overall request timeout in seconds (curl –max-time)connect_timeout_secs- Connection timeout in seconds (curl –connect-timeout)
§Security
- URL is validated against the allowlist before making the request
- Response body is limited to
max_response_bytesto prevent memory exhaustion - Redirects are not automatically followed (to prevent allowlist bypass)
Auto Trait Implementations§
impl !Freeze for HttpClient
impl !RefUnwindSafe for HttpClient
impl Send for HttpClient
impl Sync for HttpClient
impl Unpin for HttpClient
impl UnsafeUnpin for HttpClient
impl !UnwindSafe for HttpClient
Blanket Implementations§
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> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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 moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more