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(())
}
一番しっくりするが、なんかベストプラクティスではなさそうな感じがする…