http_tool.rs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. use reqwest::{Client};
  2. use reqwest::header::HeaderMap;
  3. use tracing::trace;
  4. use crate::response_base::ResponseData;
  5. #[derive(Clone)]
  6. pub struct RestTool {
  7. pub base_url: String,
  8. client: Client,
  9. }
  10. impl RestTool {
  11. pub fn new(base_url: String) -> RestTool {
  12. RestTool { base_url, client: Client::new() }
  13. }
  14. pub async fn http_toll(&self, request_path: String, request_type: String, params: String, headers: HeaderMap) -> Result<ResponseData, reqwest::Error> {
  15. let res_data: ResponseData;
  16. /****请求接口与 地址*/
  17. let url = format!("{}{}", self.base_url.to_string(), request_path);
  18. let request_type = request_type.clone().to_uppercase();
  19. let addrs_url = format!("{}?{}", url.clone(), RestTool::parse_params_to_str(params.clone()));
  20. // let params_json: serde_json::Value = serde_json::from_str(&params).unwrap();
  21. // trace!("url:{}",url);
  22. // trace!("addrs_url:{}",url);
  23. // trace!("params_json:{}",params_json);
  24. // trace!("headers:{:?}",headers);
  25. let req = match request_type.as_str() {
  26. "GET" => self.client.get(addrs_url.clone()).headers(headers),
  27. "POST" => self.client.post(addrs_url.clone()).body(params).headers(headers),
  28. "DELETE" => self.client.delete(addrs_url.clone()).headers(headers),
  29. // "PUT" => self.client.put(url.clone()).json(&params),
  30. _ => return Ok(ResponseData::error("".to_string(),format!("错误的请求类型:{}", request_type.clone()))), // 处理未知请求类型
  31. };
  32. let response = req.send().await?;
  33. if response.status().is_success() {
  34. // 读取响应的内容
  35. let body = response.text().await?;
  36. // trace!("ok-----{}", body);
  37. res_data = ResponseData::new("".to_string(),"200".to_string(), "success".to_string(), body);
  38. } else {
  39. let body = response.text().await?;
  40. // trace!("error-----{}", body);
  41. res_data = ResponseData::error("".to_string(),body.to_string())
  42. }
  43. Ok(res_data)
  44. }
  45. //map数据转 get请求参数
  46. pub fn parse_params_to_str(parameters: String) -> String {
  47. let mut params_str = String::from("");
  48. let parsed_json: serde_json::Value = serde_json::from_str(&parameters).unwrap();
  49. if let Some(json_obj) = parsed_json.as_object() {
  50. for (key, value) in json_obj.iter() {
  51. let formatted_value = match value {
  52. serde_json::Value::String(s) => s.clone(),
  53. _ => value.to_string()
  54. };
  55. // trace!("Key: {}", key);
  56. // trace!("Value: {}", formatted_value);
  57. // let formatted_value = match value {
  58. // Value::String(s) => s.clone(),
  59. // _ => value.to_string()
  60. // };
  61. let str = format!("{}={}", key, formatted_value);
  62. let format_str = format!("{}{}{}", params_str, (if params_str.len() > 0 { "&" } else { "" }), str);
  63. params_str = format_str;
  64. }
  65. }
  66. trace!("---json-转字符串拼接:{}",params_str);
  67. params_str.to_string()
  68. }
  69. //res_data 解析
  70. pub fn res_data_analysis(result: Result<ResponseData, reqwest::Error>) -> ResponseData {
  71. match result {
  72. Ok(res_data) => {
  73. if res_data.code != "0" {
  74. res_data
  75. } else {
  76. let body: String = res_data.data;
  77. let json_value: serde_json::Value = serde_json::from_str(&body).unwrap();
  78. let code = json_value["code"].as_str().unwrap();
  79. let data = serde_json::to_string(&json_value["data"]).unwrap();
  80. let msg = json_value["msg"].as_str().unwrap();
  81. // //trace!("--解析成功----code:{}",code);
  82. // //trace!("--解析成功----data:{}",data);
  83. // //trace!("--解析成功----msg:{}",msg);
  84. let success = ResponseData::new("".to_string(),
  85. code.parse().unwrap(),
  86. msg.parse().unwrap(),
  87. data.parse().unwrap());
  88. success
  89. }
  90. }
  91. Err(err) => {
  92. let error = ResponseData::error("".to_string(),format!("json 解析失败:{}", err));
  93. error
  94. }
  95. }
  96. }
  97. }