🔲
Rustのreqwestライブラリのエラーハンドリングでハマった件
正常形
let url = "https://jsonplaceholder.typicode.com/users/1";
let response = reqwest::get(url).await;
println!("{:?}", response); // Result型はOKで帰ってくる
異常形(存在しないドメイン)
let url = "https://unkown.example.com/";
let response = reqwest::get(url).await;
println!("{:?}", response); // Result型はErrで帰ってくる
異常形(存在するドメインだがPathが存在しない)
let url = "https://jsonplaceholder.typicode.com/unkownpath/1";
let response = reqwest::get(url).await;
println!("{:?}", response); // Result型はOKで帰ってくる!!
ここがなんでやねんポイント!!
両対応でエラーハンドリングする方法
let url = "https://jsonplaceholder.typicode.com/unkownpath/1";
let response = reqwest::get(url).await;
// サーバに接続できなかった系エラー
if response.is_err() {
println!("{:?}", err);
}
// サーバに接続できたが、ステータスがエラーの場合
if let Err(ref err) = response.as_ref().unwrap().error_for_status_ref() {
println!("{:?}", err);
}
面倒だが、両方のパターンをチェックする必要があるっぽい。
まとめ
個人的には404はエラーだと思うのだが、ライブラリ作者としては通信が成功した場合はOKということになるっぽい。
Discussion