Open1
reqwestのresponseエラーチェック
jsonを返すapiをreqwestで読んで、responseを処理する事例。
いきなりresponse.json()を呼んでエラーチェックすると、response自体はmoveされてしまい、response内容をログに残せないので、
事前にerror_for_status_refで、statusチェック用のrefでresponseがエラーか否かをmatchでチェックし、処理を分岐させる。
let value: serde_json::Value = xxxxx;
let response = create_client()
.post(&format!("{}/sample/api/path", API_BASE))
.json(&value)
.timeout(Duration::from_secs(120))
.send()
.await?;
let status_ref = response.error_for_status_ref();
match status_ref {
Ok(_) => {
match response.json::<serde_json::Value>().await {
Ok(jsonData) => {
tracing::info!("response: {:?}", jsonData);
Ok(())
},
Err(e) => {
tracing::error!("can't parse response to json: {:?}", e);
Err(anyhow::Error::new(e))
}
}
},
Err(e) => {
info!("response error.: {:?}, {:?}", e, response);
return Err(anyhow::Error::new(e))
}
}