| 32 | } |
| 33 | |
| 34 | async fn proxy(server_req: Request<Body>, target_url: Uri) -> Result<Response<Body>, Error> { |
| 35 | let client = Client::new(); |
| 36 | let mut client_req = Request::builder(); |
| 37 | client_req = client_req.uri(target_url).method(server_req.method()); |
| 38 | |
| 39 | // Copy headers from `server_req` to the `client_req`. |
| 40 | for (key, value) in server_req.headers() { |
| 41 | client_req = client_req.header(key, value); |
| 42 | } |
| 43 | |
| 44 | // Stream the request body. |
| 45 | let client_req = client_req.body(server_req.into_body())?; |
| 46 | // Send the request. |
| 47 | let client_resp = client.send(client_req).await?; |
| 48 | // Copy headers from `client_resp` to `server_resp`. |
| 49 | let mut server_resp = Response::builder(); |
| 50 | for (key, value) in client_resp.headers() { |
| 51 | server_resp |
| 52 | .headers_mut() |
| 53 | .expect("no errors could be in ResponseBuilder") |
| 54 | .append(key, value.clone()); |
| 55 | } |
| 56 | Ok(server_resp.body(client_resp.into_body())?) |
| 57 | } |
| 58 | |
| 59 | fn http_not_found(_request: Request<Body>) -> Response<Body> { |
| 60 | Response::builder() |