Hi all, I'm trying to create a HTTP request to the Minecraft server webpage to get the latest version of Minecraft as a string.
I wrote some pretty simple code:
#[tokio::main]
async fn request_thread() {
println!("Starting request");
let mut headers = HeaderMap::new();
headers.insert(
"Accept",
HeaderValue::from_static(
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
),
);
headers.insert(
"Accept-Language",
HeaderValue::from_static("en-GB,en;q=0.5"),
);
headers.insert(
"Accept-Encoding",
HeaderValue::from_static("gzip, deflate, br"),
);
headers.insert("DNT", HeaderValue::from_static("1"));
headers.insert("Connection", HeaderValue::from_static("keep-alive"));
headers.insert("Upgrade-Insecure-Requests", HeaderValue::from_static("1"));
headers.insert("Sec-Fetch-Dest", HeaderValue::from_static("document"));
headers.insert("Sec-Fetch-Mode", HeaderValue::from_static("navigate"));
headers.insert("Sec-Fetch-Site", HeaderValue::from_static("cross-site"));
headers.insert("TE", HeaderValue::from_static("trailers"));
headers.insert(
"User-Agent",
HeaderValue::from_static(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0",
),
);
let client = reqwest::Client::builder()
.default_headers(headers)
.build()
.unwrap();
let resp = client
.get("https://www.minecraft.net/en-us/download/server")
.send()
.await
.unwrap()
.text()
.await
.unwrap();
println!("Request ended: {}", resp);
}
I then run this elsewhere in my program like this:
std::thread::spawn(request_thread);
However, instead of the expected HTML file, it returns complete garbage (see image #1)
Doing the exact same request in Python (same URL, same headers) returns the correct HTML file (see image #2)
Surely something's wrong with Rust here, if it works in Python? Am I doing something wrong?