diff --git a/src/backends/github.rs b/src/backends/github.rs index 96a4430..a3ea507 100644 --- a/src/backends/github.rs +++ b/src/backends/github.rs @@ -174,10 +174,13 @@ impl ReleaseList { } fn fetch_releases(&self, url: &str) -> Result> { - let resp = http_client::get( - &format!("{url}?per_page=100"), - api_headers(&self.auth_token)?, - )?; + let request_url = if url.contains('?') { + // Pagination URL from Link header — already has query params + url.to_string() + } else { + format!("{url}?per_page=100") + }; + let resp = http_client::get(&request_url, api_headers(&self.auth_token)?)?; if !resp.status().is_success() { bail!( Error::Network, diff --git a/src/http_client/reqwest.rs b/src/http_client/reqwest.rs index 1f50231..5b3ccce 100644 --- a/src/http_client/reqwest.rs +++ b/src/http_client/reqwest.rs @@ -6,12 +6,18 @@ use super::{HeaderMap, HttpResponse}; use crate::{Error, Result}; pub fn get(url: &str, headers: HeaderMap) -> Result { + use std::time::Duration; + let client_builder = reqwest::blocking::ClientBuilder::new(); #[cfg(feature = "rustls")] let client_builder = client_builder.use_rustls_tls(); - let client = client_builder.http2_adaptive_window(true).build()?; + let client = client_builder + .http2_adaptive_window(true) + .connect_timeout(Duration::from_secs(30)) + .timeout(Duration::from_secs(300)) + .build()?; let resp = client.get(url).headers(headers).send()?; if !resp.status().is_success() {