tokio::spawnのthreadで、reqwest::Clientをループで回す。結論から言うとできる。
// let handle = tokio::spawn(async move { let _ = post_test().await; }); // async fn post_test() { for i in 0..3 { let n = Name { family: "tanaka".to_string(), first:"taro".to_string(), age: i as i32}; let json = json!(n); let client = reqwest::Client::new(); let resp = client.post("http://httpbin.org/post") .json(&json) .send() .await; let body = resp.expect("REASON").text().await.unwrap(); println!("{}", body); } }
//
“json”: {
“age”: 2,
“family”: “tanaka”,
“first”: “taro”
},
//
存在しないipなど、異常系の場合は、reqwest::getでErrで返ってくるので、成功した時だけ送信する。
async fn post_test() -> Result<(), Box<dyn std::error::Error>> { let url = ["https://hogehogehogehogehoge.org/".to_string(), "http://httpbin.org/post".to_string()]; for i in 0..url.len() { let result = reqwest::get(url[i].clone()).await; match result { Err(error) => { println!("error, {}", url[i].clone()); } Ok(_) => { let n = Name { family: "tanaka".to_string(), first:"taro".to_string(), age: i as i32}; let json = json!(n); let client = reqwest::Client::new(); let resp = client.post(url[i].clone()) .json(&json) .send() .await?; let body = resp.text().await.unwrap(); println!("{}", body); } } } Ok(()) }
一番しっくりするが、なんかベストプラクティスではなさそうな感じがする…