From 70c4b29e7f224cf8f96741f437aac648f056f9a3 Mon Sep 17 00:00:00 2001 From: xfy Date: Wed, 11 Jun 2025 20:50:13 +0800 Subject: [PATCH] feat(reverse): forward request body --- src/http/reverse_proxy.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/http/reverse_proxy.rs b/src/http/reverse_proxy.rs index 5ae5afa..87f2d61 100644 --- a/src/http/reverse_proxy.rs +++ b/src/http/reverse_proxy.rs @@ -19,7 +19,7 @@ pub async fn serve( req_uri: Uri, path: Option>, Host(host): Host, - mut req: Request, + mut req: Request, ) -> RouteResult { let req_path = req.uri().path(); let path_query = req @@ -56,11 +56,26 @@ pub async fn serve( } } + // forward request body + let body = req.into_body(); + // TODO: set body size limit + let bytes = axum::body::to_bytes(body, 2048).await.map_err(|err| { + tracing::error!("Failed to proxy request: {}", err); + RouteError::InternalError() + })?; + let body_str = String::from_utf8(bytes.to_vec()).map_err(|err| { + tracing::error!("Failed to proxy request: {}", err); + RouteError::InternalError() + })?; + forward_req = forward_req.body(body_str); + + // send reverse proxy request let reqwest_response = forward_req.send().await.map_err(|e| { tracing::error!("Failed to proxy request: {}", e); RouteError::BadRequest() })?; + // response from reverse proxy server let mut response_builder = Response::builder().status(reqwest_response.status()); copy_headers( reqwest_response.headers(),