From 47ef6a06d47416559609c385d5234d155938f3e3 Mon Sep 17 00:00:00 2001
From: chowder <16789070+chowder@users.noreply.github.com>
Date: Fri, 29 Aug 2025 21:26:53 +0100
Subject: [PATCH] fix: set User-Agent header in proxied media requests to match
currently spoofed device
---
src/client.rs | 6 ++++++
src/oauth.rs | 8 +++++++-
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/client.rs b/src/client.rs
index 76369cad..716dc0eb 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -165,6 +165,12 @@ async fn stream(url: &str, req: &Request
) -> Result, String
}
}
+ // Add User-Agent header of the currently spoofed device
+ {
+ let client = OAUTH_CLIENT.load_full();
+ builder = builder.header("User-Agent", client.user_agent());
+ }
+
let stream_request = builder.body(Body::empty()).map_err(|_| "Couldn't build empty body in stream".to_string())?;
client
diff --git a/src/oauth.rs b/src/oauth.rs
index 9654e0c8..9fb2fd5b 100644
--- a/src/oauth.rs
+++ b/src/oauth.rs
@@ -148,6 +148,10 @@ impl Oauth {
Ok(())
}
+
+ pub fn user_agent(&self) -> &str {
+ &self.device.user_agent
+ }
}
#[derive(Debug)]
@@ -209,6 +213,7 @@ struct Device {
oauth_id: String,
initial_headers: HashMap,
headers: HashMap,
+ user_agent: String,
}
impl Device {
@@ -230,7 +235,7 @@ impl Device {
// Android device headers
let headers: HashMap = HashMap::from([
- ("User-Agent".into(), android_user_agent),
+ ("User-Agent".into(), android_user_agent.clone()),
("x-reddit-retry".into(), "algo=no-retries".into()),
("x-reddit-compression".into(), "1".into()),
("x-reddit-qos".into(), qos),
@@ -246,6 +251,7 @@ impl Device {
oauth_id: REDDIT_ANDROID_OAUTH_CLIENT_ID.to_string(),
headers: headers.clone(),
initial_headers: headers,
+ user_agent: android_user_agent,
}
}
fn new() -> Self {