refactor: improve request handling and response processing in MihomoManager

This commit is contained in:
Tunglies 2025-03-09 00:27:12 +08:00
parent 364fb16b7b
commit c9b3fec09c

View File

@ -49,7 +49,7 @@ impl MihomoManager {
url: String, url: String,
data: Option<serde_json::Value>, data: Option<serde_json::Value>,
) -> Result<serde_json::Value, String> { ) -> Result<serde_json::Value, String> {
let response = reqwest::ClientBuilder::new() let client_response = reqwest::ClientBuilder::new()
.default_headers(self.headers.clone()) .default_headers(self.headers.clone())
.no_proxy() .no_proxy()
.timeout(Duration::from_secs(2)) .timeout(Duration::from_secs(2))
@ -68,10 +68,14 @@ impl MihomoManager {
.json(&data.unwrap_or(json!({}))) .json(&data.unwrap_or(json!({})))
.send() .send()
.await .await
.map_err(|e| e.to_string())?
.json::<serde_json::Value>()
.await
.map_err(|e| e.to_string())?; .map_err(|e| e.to_string())?;
let response = if method != "PUT" {
client_response.json::<serde_json::Value>().await
} else {
client_response.text().await.map(|text| json!(text))
}
.map_err(|e| e.to_string())?;
return Ok(response); return Ok(response);
} }
@ -97,14 +101,15 @@ impl MihomoManager {
"path": clash_config_path, "path": clash_config_path,
}); });
let response = self.send_request("PUT", url, Some(payload)).await?; let response = self.send_request("PUT", url, Some(payload)).await?;
if response["code"] == 204 { println!("put_configs_force::{:?}", response);
Ok(()) Ok(())
} else { // if response["code"] == 204 {
Err(response["message"] // Ok(())
.as_str() // } else {
.unwrap_or("unknown error") // Err(response["message"]
.to_string()) // .as_str()
} // .unwrap_or("unknown error")
// .to_string())
} }
pub async fn patch_configs(&self, config: serde_json::Value) -> Result<(), String> { pub async fn patch_configs(&self, config: serde_json::Value) -> Result<(), String> {
@ -127,8 +132,11 @@ impl MihomoManager {
timeout: i32, timeout: i32,
) -> Result<serde_json::Value, String> { ) -> Result<serde_json::Value, String> {
let test_url = test_url.unwrap_or("http://cp.cloudflare.com/generate_204".to_string()); let test_url = test_url.unwrap_or("http://cp.cloudflare.com/generate_204".to_string());
let url = format!("{}/proxies/{}/delay?url={}&timeout={}", self.mihomo_server, name, test_url, timeout); let url = format!(
"{}/proxies/{}/delay?url={}&timeout={}",
self.mihomo_server, name, test_url, timeout
);
let response = self.send_request("GET", url, None).await?; let response = self.send_request("GET", url, None).await?;
return Ok(response); return Ok(response);
} }
} }