zabbix_api/client/
post.rs1use log::{debug, error};
2use reqwest::blocking::Client;
3use serde::Serialize;
4
5use crate::error::ZabbixApiError;
6
7const CONTENT_TYPE_HEADER: &str = "Content-Type";
8const CONTENT_TYPE_JSON: &str = "application/json";
9
10pub fn send_post_request<T: Serialize>(
11 client: &Client,
12 url: &str,
13 session: Option<&str>,
14 request: T,
15) -> Result<String, ZabbixApiError> {
16 debug!("send post request to '{url}'");
17
18 let request_body = serde_json::to_string(&request)?;
19
20 debug!("---[HTTP REQUEST]----");
21 debug!("{}", request_body);
22 debug!("---[/HTTP REQUEST]----");
23
24 let mut http_request_builder = client
25 .post(url)
26 .body(request_body)
27 .header(CONTENT_TYPE_HEADER, CONTENT_TYPE_JSON);
28
29 if let Some(auth_token) = session {
30 #[cfg(feature = "v7")]
31 {
32 http_request_builder = http_request_builder.bearer_auth(auth_token);
34 }
35 }
38
39 let response = http_request_builder.send()?;
40
41 let response_status = response.status();
42 let response_text = response.text()?;
43
44 debug!("---[HTTP RESPONSE]----");
45 debug!("{}", response_text);
46 debug!("---[/HTTP RESPONSE]----");
47
48 if response_status == reqwest::StatusCode::OK {
49 Ok(response_text)
50 } else {
51 error!("unexpected server response code {}", response_status);
52 Err(ZabbixApiError::BadRequestError)
53 }
54}