diff --git a/src/main.rs b/src/main.rs index ad700b4..cae9c82 100644 --- a/src/main.rs +++ b/src/main.rs @@ -45,16 +45,27 @@ async fn get_file(req: HttpRequest) -> HttpResponse { Some(v) => v.iter().next().clone(), }; let url = match url { - Some(u) => u, None => { - return HttpResponse::BadRequest().content_type("text/plain").body("No url!"); - }, + Some(u) => u, + None => return HttpResponse::BadRequest().content_type("text/plain").body("No url!"), }; - let resp = reqwest::get(url.as_str()).await.unwrap(); - // TODO ... - HttpResponse::Ok() - .content_type("text/plain") - .streaming(ProxyStream{ inner: Box::new(resp.bytes_stream()) }) + let resp = match reqwest::get(url.as_str()).await { + Ok(resp) => resp, + Err(e) => return HttpResponse::BadGateway().content_type("text/plain") + .body(format!("Bad gateway error: {}", e)), + }; + let mut http_response = HttpResponse::build(resp.status()); + + let resp_headers = resp.headers(); + information!("Response headers: {:#?}", resp_headers); + for (k, v) in resp_headers.iter() { + let key_str = k.as_str(); + let value_str = match v.to_str() { + Ok(v) => v, Err(_) => continue, + }; + http_response.header(key_str, value_str); + } + http_response.streaming(ProxyStream{ inner: Box::new(resp.bytes_stream()) }) } #[actix_rt::main]