Skip to content

Commit 549f4e1

Browse files
committed
feat(tablet,mobile): add tablet and mobile agents
1 parent 98ec075 commit 549f4e1

File tree

11 files changed

+218
-35
lines changed

11 files changed

+218
-35
lines changed

Cargo.lock

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ua_generator/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "ua_generator"
3-
version = "0.5.15"
3+
version = "0.5.16"
44
edition = "2021"
55
authors = ["j-mendez <jeff@spider.cloud>"]
66
description = "Random User Agent Spoofer in Rust."

ua_generator/build.rs

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,113 @@ pub const STATIC_CHROME_AGENTS: &'static [&'static str; {}] = &[
285285
let _ = bump_version_in_cargo_toml();
286286
}
287287

288+
// Build a list of valid chrome user-agents to use for chrome only browsers.
289+
let chrome_agent_list: Vec<ApiResult> = match get(&format!(
290+
"{base_api}?chrome=true&desktop=false&tablet=false&mobile=true&list=true"
291+
))
292+
.set("apikey", &token)
293+
.set("user-agent", "spider-rs")
294+
.call()
295+
{
296+
Ok(req) => {
297+
let req: Vec<ApiResult> = req
298+
.into_json()
299+
.expect("Authorization not granted! Make sure to set a valid API key.");
300+
req
301+
}
302+
Err(e) => {
303+
panic!("{:?}", e)
304+
}
305+
};
306+
let dest_path = Path::new(&"./src").join("chrome_mobile_ua_list.rs");
307+
let mut chrome_devices = format!(
308+
r#"/// List of real chrome mobile User-Agents.
309+
pub const STATIC_CHROME_MOBILE_AGENTS: &'static [&'static str; {}] = &[
310+
"#,
311+
chrome_agent_list.len()
312+
);
313+
314+
for device in chrome_agent_list {
315+
chrome_devices.push_str(&format!(" \"{}\",\n", device.agent));
316+
}
317+
318+
chrome_devices.push_str("];");
319+
320+
if let Ok(_) = fs::write(dest_path, chrome_devices) {
321+
let _ = bump_version_in_cargo_toml();
322+
}
323+
324+
// Build a list of valid chrome user-agents to use for chrome only browsers.
325+
let chrome_agent_list: Vec<ApiResult> =
326+
match get(&format!("{base_api}?chrome=true&list=true"))
327+
.set("apikey", &token)
328+
.set("user-agent", "spider-rs")
329+
.call()
330+
{
331+
Ok(req) => {
332+
let req: Vec<ApiResult> = req
333+
.into_json()
334+
.expect("Authorization not granted! Make sure to set a valid API key.");
335+
req
336+
}
337+
Err(e) => {
338+
panic!("{:?}", e)
339+
}
340+
};
341+
let dest_path = Path::new(&"./src").join("chrome_ua_list.rs");
342+
let mut chrome_devices = format!(
343+
r#"/// List of real Chrome User-Agents.
344+
pub const STATIC_CHROME_AGENTS: &'static [&'static str; {}] = &[
345+
"#,
346+
chrome_agent_list.len()
347+
);
348+
349+
for device in chrome_agent_list {
350+
chrome_devices.push_str(&format!(" \"{}\",\n", device.agent));
351+
}
352+
353+
chrome_devices.push_str("];");
354+
355+
if let Ok(_) = fs::write(dest_path, chrome_devices) {
356+
let _ = bump_version_in_cargo_toml();
357+
}
358+
359+
// Build a list of valid chrome user-agents to use for chrome only browsers.
360+
let chrome_agent_list: Vec<ApiResult> = match get(&format!(
361+
"{base_api}?chrome=true&desktop=false&tablet=true&mobile=false&list=true"
362+
))
363+
.set("apikey", &token)
364+
.set("user-agent", "spider-rs")
365+
.call()
366+
{
367+
Ok(req) => {
368+
let req: Vec<ApiResult> = req
369+
.into_json()
370+
.expect("Authorization not granted! Make sure to set a valid API key.");
371+
req
372+
}
373+
Err(e) => {
374+
panic!("{:?}", e)
375+
}
376+
};
377+
let dest_path = Path::new(&"./src").join("chrome_tablet_ua_list.rs");
378+
let mut chrome_devices = format!(
379+
r#"/// List of real chrome tablet User-Agents.
380+
pub const STATIC_CHROME_TABLET_AGENTS: &'static [&'static str; {}] = &[
381+
"#,
382+
chrome_agent_list.len()
383+
);
384+
385+
for device in chrome_agent_list {
386+
chrome_devices.push_str(&format!(" \"{}\",\n", device.agent));
387+
}
388+
389+
chrome_devices.push_str("];");
390+
391+
if let Ok(_) = fs::write(dest_path, chrome_devices) {
392+
let _ = bump_version_in_cargo_toml();
393+
}
394+
288395
println!("cargo:rerun-if-changed=build.rs");
289396
}
290397

ua_generator/src/chrome_linux_ua_list.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
/// static list of agents pre-built
22
pub const STATIC_CHROME_LINUX_AGENTS: &'static [&'static str; 9] = &[
3-
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
43
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
54
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
5+
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
66
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
7+
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
8+
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
79
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
8-
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
9-
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
10-
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
10+
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
1111
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36"
12-
];
12+
];
1313

1414
/// chrome linux user agent list
1515
pub fn chrome_linux_agents() -> [&'static str; 9] {

ua_generator/src/chrome_mac_ua_list.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
/// static list of agents pre-built
22
pub const STATIC_CHROME_MAC_AGENTS: &'static [&'static str; 9] = &[
3-
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
4-
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36",
53
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
64
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
75
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
86
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
97
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
108
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
11-
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36"
12-
];
9+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
10+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
11+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36"
12+
];
1313

1414
/// chrome mac user agent list
1515
pub fn chrome_mac_agents() -> [&'static str; 9] {
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/// List of real chrome mobile User-Agents.
2+
pub const STATIC_CHROME_MOBILE_AGENTS: &'static [&'static str; 20] = &[
3+
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36",
4+
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36",
5+
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36",
6+
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36",
7+
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36",
8+
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36",
9+
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36",
10+
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_2_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/131.0.6778.103 Mobile/15E148 Safari/604.1",
11+
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_2_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/131.0.6778.73 Mobile/15E148 Safari/604.1",
12+
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/131.0.6778.73 Mobile/15E148 Safari/604.1",
13+
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36",
14+
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36",
15+
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Mobile Safari/537.36",
16+
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/130.0.6723.78 Mobile/15E148 Safari/604.1",
17+
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/130.0.6723.37 Mobile/15E148 Safari/604.1",
18+
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Mobile Safari/537.36",
19+
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/129.0.6668.69 Mobile/15E148 Safari/604.1",
20+
"Mozilla/5.0 (iPhone; CPU iPhone OS 18_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/129.0.6668.69 Mobile/15E148 Safari/604.1",
21+
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Mobile Safari/537.36",
22+
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/129.0.6668.46 Mobile/15E148 Safari/604.1",
23+
];
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/// List of real chrome tablet User-Agents.
2+
pub const STATIC_CHROME_TABLET_AGENTS: &'static [&'static str; 10] = &[
3+
"Mozilla/5.0 (iPad; CPU OS 18_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/131.0.6778.73 Mobile/15E148 Safari/604.1",
4+
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36",
5+
"Mozilla/5.0 (iPad; CPU OS 18_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/130.0.6723.90 Mobile/15E148 Safari/604.1",
6+
"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
7+
"Mozilla/5.0 (Linux; Android 11; SM-T500 Build/RP1A.200720.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.94 Safari/537.36",
8+
"Mozilla/5.0 (iPad; CPU OS 17_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/123.0.6312.52 Mobile/15E148 Safari/604.1",
9+
"Mozilla/5.0 (Linux; Android 13; Lenovo TB-X606F Build/TKQ1.220807.001) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.162 Safari/537.36",
10+
"Mozilla/5.0 (iPad; CPU OS 16_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/112.0.5615.46 Mobile/15E148 Safari/604.1",
11+
"Mozilla/5.0 (Linux; Android 12; SAMSUNG SM-X200 Build/SP1A.210812.016) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.122 Safari/537.36",
12+
"Mozilla/5.0 (Linux; Android 10; KFMUWI Build/QTU1.210630.001) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.6167.186 Safari/537.36",
13+
];

ua_generator/src/chrome_ua_list.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,20 @@ pub const STATIC_CHROME_AGENTS: &'static [&'static str; 20] = &[
44
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
55
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
66
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
7+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
8+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
79
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36",
8-
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
910
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
10-
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
11+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
12+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36",
13+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
1114
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
15+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
1216
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
1317
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
14-
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
15-
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
1618
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
17-
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
18-
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
19-
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
20-
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
2119
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
22-
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36",
23-
];
20+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36",
21+
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
22+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",
23+
];

ua_generator/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020
pub mod chrome_linux_ua_list;
2121
/// Auto generated list of real Chrome Mac User Agents.
2222
pub mod chrome_mac_ua_list;
23+
/// Auto generated latest real chrome mobile user-agents.
24+
pub mod chrome_mobile_ua_list;
25+
/// Auto generated latest real chrome tablet user-agents.
26+
pub mod chrome_tablet_ua_list;
2327
/// Auto generated list of real Chrome User Agents.
2428
pub mod chrome_ua_list;
2529
/// User agent management.

ua_generator/src/ua.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
pub use crate::chrome_linux_ua_list::STATIC_CHROME_LINUX_AGENTS;
22
pub use crate::chrome_mac_ua_list::STATIC_CHROME_MAC_AGENTS;
3+
pub use crate::chrome_mobile_ua_list::STATIC_CHROME_MOBILE_AGENTS;
4+
pub use crate::chrome_tablet_ua_list::STATIC_CHROME_TABLET_AGENTS;
35
pub use crate::chrome_ua_list::STATIC_CHROME_AGENTS;
46
pub use crate::ua_list::STATIC_AGENTS;
57

@@ -27,6 +29,16 @@ pub fn spoof_chrome_linux_ua() -> &'static str {
2729
STATIC_CHROME_LINUX_AGENTS[fastrand::usize(..STATIC_CHROME_LINUX_AGENTS.len())]
2830
}
2931

32+
/// Get a random chrome mobile UA from a static precompiled list.
33+
pub fn spoof_chrome_mobile_ua() -> &'static str {
34+
STATIC_CHROME_MOBILE_AGENTS[fastrand::usize(..STATIC_CHROME_MOBILE_AGENTS.len())]
35+
}
36+
37+
/// Get a random chrome mobile UA from a static precompiled list.
38+
pub fn spoof_chrome_tablet_ua() -> &'static str {
39+
STATIC_CHROME_TABLET_AGENTS[fastrand::usize(..STATIC_CHROME_TABLET_AGENTS.len())]
40+
}
41+
3042
/// Get a random UA from a static precompiled list.
3143
pub fn spoof_ua_with_randomizer(thread_rng: &mut Rng) -> &'static str {
3244
STATIC_AGENTS[thread_rng.usize(..STATIC_AGENTS.len())]
@@ -47,6 +59,30 @@ pub fn spoof_chrome_linux_ua_with_randomizer(thread_rng: &mut Rng) -> &'static s
4759
STATIC_CHROME_LINUX_AGENTS[thread_rng.usize(..STATIC_CHROME_LINUX_AGENTS.len())]
4860
}
4961

62+
/// Returns a combined vector containing all user-agents from various predefined static categories.
63+
pub fn all_static_agents() -> &'static Vec<&'static str> {
64+
static AGENTS: std::sync::OnceLock<Vec<&'static str>> = std::sync::OnceLock::new();
65+
66+
AGENTS.get_or_init(|| {
67+
STATIC_AGENTS
68+
.iter()
69+
.chain(STATIC_CHROME_AGENTS.iter())
70+
.chain(STATIC_CHROME_MAC_AGENTS.iter())
71+
.chain(STATIC_CHROME_LINUX_AGENTS.iter())
72+
.chain(STATIC_CHROME_MOBILE_AGENTS.iter())
73+
.chain(STATIC_CHROME_TABLET_AGENTS.iter())
74+
.copied()
75+
.collect()
76+
})
77+
}
78+
79+
/// Returns a random user-agent from all predefined static categories.
80+
/// Generally you do not want to use this unless you have a setup that can at hand use any of the agents.
81+
pub fn spoof_random_agent(thread_rng: &mut Rng) -> &'static str {
82+
let agents = all_static_agents();
83+
agents[thread_rng.usize(..agents.len())]
84+
}
85+
5086
/// Structure to manage a dynamic list of User-Agents, with quick lookup capabilities.
5187
#[derive(Default, Clone)]
5288
pub struct UserAgents {

0 commit comments

Comments
 (0)