From b6da2c9d9cfd8f493d4e3ba049601dd515834e8f Mon Sep 17 00:00:00 2001 From: lifegpc Date: Sun, 1 Oct 2023 14:00:56 +0000 Subject: [PATCH] Update /proxy/pixiv --- src/server/proxy/pixiv.rs | 47 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/src/server/proxy/pixiv.rs b/src/server/proxy/pixiv.rs index b2cb14a..10b0519 100644 --- a/src/server/proxy/pixiv.rs +++ b/src/server/proxy/pixiv.rs @@ -1,7 +1,6 @@ use super::super::preclude::*; use crate::webclient::WebClient; use http::Uri; -use std::collections::HashMap; pub struct ProxyPixivContext { ctx: Arc, @@ -39,11 +38,53 @@ impl ResponseFor>> for ProxyPixivContext { } let client = WebClient::default(); client.set_header("referer", "https://www.pixiv.net/"); - let headers = HashMap::new(); + let o = req.headers(); + match o.get("user-agent") { + Some(v) => { + client.set_header( + "user-agent", + v.to_str() + .unwrap_or("PixivAndroidApp/5.0.234 (Android 11; Pixel 5)"), + ); + } + None => {} + } + let keys = ["Range", "Accept", "If-Modified-Since"]; + for k in keys { + match o.get(k) { + Some(v) => { + client.set_header(k, v.to_str().unwrap_or("")); + } + None => {} + } + } let re = http_error!( 502, - client.get(url, headers).await.ok_or("Failed to get image.") + client.get(url, None).await.ok_or("Failed to get image.") ); + builder = builder.status(re.status()); + let keys = [ + "cache-control", + "content-length", + "content-type", + "date", + "last-modified", + "content-range", + "age", + "expires", + "keep-alive", + "location", + "server", + ]; + let o = re.headers(); + for k in keys { + match o.get(k) { + Some(v) => { + builder = builder.header(k, v.to_str().unwrap_or("")); + } + None => {} + } + } return Ok(builder.body::>>(Box::pin(ResponseBody::new(re)))?); } }