reqwest 示例 POST 请求未编译
reqwest example POST request not compiling
我尝试遵守以下要求示例:
let client = reqwest::Client::new();
let res = client.post("http://httpbin.org/post")
.body("the exact body that is sent")
.send()?;
示例编译失败:
error[E0277]: the `?` operator can only be applied to values that implement `std::ops::Try`
--> src/main.rs:26:15
|
26 | let res = client.post("http://httpbin.org/post")
| _______________^
27 | | .body("the exact body that is sent")
28 | | .send()?;
| |____________^ the `?` operator cannot be applied to type `impl std::future::Future`
|
= help: the trait `std::ops::Try` is not implemented for `impl std::future::Future`
= note: required by `std::ops::Try::into_result`
error[E0277]: the `?` operator can only be used in a function that returns `Result` or `Option` (or another type that implements `std::ops::Try`)
--> src/main.rs:26:15
|
11 | / fn main(){
12 | | // gets the api key from env var
13 | | let mut key: String = env::var("key").unwrap();
14 | | // get the mok key bassically useless but its still useful to prevent tampering
... |
26 | | let res = client.post("http://httpbin.org/post")
| |_______________^
27 | || .body("the exact body that is sent")
28 | || .send()?;
| ||____________^ cannot use the `?` operator in a function that returns `()`
... |
49 | | //}
50 | | }
| |_- this function should return `Result` or `Option` to accept `?`
|
= help: the trait `std::ops::Try` is not implemented for `()`
= note: required by `std::ops::Try::from_error`
我应该如何解决这个问题?这是过时了吗?
我正在使用 Rust 版本 1.47.0
根据错误消息,您正在使用 reqwest 的异步版本。如果我没记错的话,最新版本包含异步和阻塞版本。
为了实际消费 future 并获取其中的值,您需要使用执行器来执行它,例如东京。这可以通过多种方式完成。
最简单的方法是将 tokio = { version = "0.2.22", features = ["macros"] }
添加到您的 Cargo.toml,然后将其添加到 main.rs
:
#[tokio::main]
async fn main() {
let client = reqwest::Client::new();
let res = client.post("http://httpbin.org/post")
.body("the exact body that is sent")
.send().await;
}
请注意,我删除了 ?
,因为未来不会解析为 Result
或 Option
。
我尝试遵守以下要求示例:
let client = reqwest::Client::new();
let res = client.post("http://httpbin.org/post")
.body("the exact body that is sent")
.send()?;
示例编译失败:
error[E0277]: the `?` operator can only be applied to values that implement `std::ops::Try`
--> src/main.rs:26:15
|
26 | let res = client.post("http://httpbin.org/post")
| _______________^
27 | | .body("the exact body that is sent")
28 | | .send()?;
| |____________^ the `?` operator cannot be applied to type `impl std::future::Future`
|
= help: the trait `std::ops::Try` is not implemented for `impl std::future::Future`
= note: required by `std::ops::Try::into_result`
error[E0277]: the `?` operator can only be used in a function that returns `Result` or `Option` (or another type that implements `std::ops::Try`)
--> src/main.rs:26:15
|
11 | / fn main(){
12 | | // gets the api key from env var
13 | | let mut key: String = env::var("key").unwrap();
14 | | // get the mok key bassically useless but its still useful to prevent tampering
... |
26 | | let res = client.post("http://httpbin.org/post")
| |_______________^
27 | || .body("the exact body that is sent")
28 | || .send()?;
| ||____________^ cannot use the `?` operator in a function that returns `()`
... |
49 | | //}
50 | | }
| |_- this function should return `Result` or `Option` to accept `?`
|
= help: the trait `std::ops::Try` is not implemented for `()`
= note: required by `std::ops::Try::from_error`
我应该如何解决这个问题?这是过时了吗? 我正在使用 Rust 版本 1.47.0
根据错误消息,您正在使用 reqwest 的异步版本。如果我没记错的话,最新版本包含异步和阻塞版本。
为了实际消费 future 并获取其中的值,您需要使用执行器来执行它,例如东京。这可以通过多种方式完成。
最简单的方法是将 tokio = { version = "0.2.22", features = ["macros"] }
添加到您的 Cargo.toml,然后将其添加到 main.rs
:
#[tokio::main]
async fn main() {
let client = reqwest::Client::new();
let res = client.post("http://httpbin.org/post")
.body("the exact body that is sent")
.send().await;
}
请注意,我删除了 ?
,因为未来不会解析为 Result
或 Option
。