标签: reqwest

在“reqwest”中找不到“blocking”

我正在尝试使用reqwest 0.10.0-alpha.2从给定的 URL 下载文本文件,它看起来像一个合适的工具。我的 Cargo.toml 文件中有这个:

[package]
name = "..."
version = "0.1.0"
authors = ["Y*** <y***@***.***>"]
edition = "2019"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
reqwest = "0.10.0-alpha.2"
Run Code Online (Sandbox Code Playgroud)

依赖似乎解决了,我有我的 Cargo.lock 文件。

我从文档中提取这个片段

let body = reqwest::blocking::get("https://www.rust-lang.org")?
    .text()?;

println!("body = {:?}", body);
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

[package]
name = "..."
version = "0.1.0"
authors = ["Y*** <y***@***.***>"]
edition = "2019"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
reqwest = "0.10.0-alpha.2" …
Run Code Online (Sandbox Code Playgroud)

rust reqwest

30
推荐指数
1
解决办法
4894
查看次数

`?` 运算符只能在返回 `Result` 或 `Option 的异步块中使用

我正在学习 Rust 并尝试通过发送一些 POST 数据来抓取随机站点,但我收到了一堆错误,例如:

error[E0277]: the `?` operator can only be used in an async block that returns `Result` or `Option` (or another type that implements `FromResidual`)

37  | |     let text = res.text().await?;
    | |                                ^ cannot use the `?` operator in an async block that returns `()`

Run Code Online (Sandbox Code Playgroud)

代码如下。我已经多次浏览文档,但我返回了 Result<> 所以我不确定出了什么问题。

use std::sync::Arc;


#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("Hello, world!");

    use reqwest::{cookie::Jar, Url};
    use reqwest::header;

    let mut headers = header::HeaderMap::new();
    headers.insert("User-Agent", header::HeaderValue::from_static("Mozilla/5.0 (Macintosh; Intel …
Run Code Online (Sandbox Code Playgroud)

rust reqwest

16
推荐指数
1
解决办法
1万
查看次数

Reqwest 比 Hyper 等级高多少?

根据 Hyper.rs 上的文档,

如果您正在寻找一个方便的 HTTP 客户端,那么您不妨考虑一下reqwest。如果您正在寻找一个方便的 HTTP 服务器,那么您不妨考虑一下warp。两者都是建立在这个库之上的。

从 API 来看,Hyper.rs 的水平似乎已经相当高了。它支持proxytlscookies ...为什么 Reqwest 级别更高?

rust hyper reqwest

15
推荐指数
1
解决办法
5042
查看次数

reqwest::Error { kind: 解码, source: Error("期望值", 行: 1, 列: 1) }'

我在创建此 POST 请求时收到以下错误。我是 RUST 的新手。

相反,serde_json::Value我什至尝试过HashMap<String, String>同样的问题。如果你能告诉我我的标头是否错误,或者我如何跟踪它是否实际上是网络请求问题?

这是我期待的实际回应。Session我尝试将serde_json::Value 替换为 Session仍然没有效果,错误仍然存​​在。

#[derive(Debug, Deserialize, Serialize)]
pub struct Session {
    pub platform_type: String,
    pub ticket: String,
    pub profile_id: String,
    pub user_id: String,
    pub name_on_platform: String,
    pub expiration: String, //2020-08-26T16:46:59.4772040Z
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 Popos 20.04 和 Rust 1.45.2

    pub async fn login(&self) -> Result<serde_json::Value, reqwest::Error> {
        let response = self.client
            .post(request_url)
            .headers(self.construct_headers())
            .basic_auth(self.email.clone(), Some(self.password.clone()))
            .send().await?
            .json::<serde_json::Value>().await?;

        Ok(response)
    }

    fn construct_headers(&self) -> HeaderMap {
        let mut headers = …
Run Code Online (Sandbox Code Playgroud)

rust rust-tokio reqwest

12
推荐指数
1
解决办法
5721
查看次数

如何使用 reqwest 获取响应正文?

我正在尝试向 Binance API 发送 GET 请求。但我在终端中得到以下输出而不是数据:

Response { url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("api.binance.com")), port: None, path: "/api/v3/exchangeInfo", query: Some("symbol=BNBBTC"), fragment: None }, status: 200, headers: {"content-type": "application/json;charset=UTF-8", "content-length": "1515", "connection": "keep-alive", "date": "Thu, 23 Dec 2021 23:28:24 GMT", "server": "nginx", "vary": "Accept-Encoding", "x-mbx-uuid": "1244d760-2c41-46df-910f-b95c4a312bc2", "x-mbx-used-weight": "10", "x-mbx-used-weight-1m": "10", "strict-transport-security": "max-age=31536000; includeSubdomains", "x-frame-options": "SAMEORIGIN", "x-xss-protection": "1; mode=block", "x-content-type-options": "nosniff", "content-security-policy": "default-src 'self'", "x-content-security-policy": "default-src 'self'", "x-webkit-csp": "default-src 'self'", "cache-control": "no-cache, no-store, must-revalidate", "pragma": …
Run Code Online (Sandbox Code Playgroud)

rust reqwest

12
推荐指数
1
解决办法
2万
查看次数

如何使用Reqwest设置请求标头?

我需要使用Reqwest库向具有cookie的网站发出GET请求。我想出了如何发送GET请求的方法:

let response = reqwest::get("http://example.com")?;
Run Code Online (Sandbox Code Playgroud)

如何发送相同的请求,但添加一些自定义标头?

http http-headers rust reqwest

9
推荐指数
2
解决办法
2782
查看次数

使用 Rust reqwest Crate 中的 POST 中的 JSON 正文

curl我正在尝试使用 Rust crate reqwest来实现此调用:

curl -u [USERNAME]:[PASSWORD] -H "Content-Type: application/json" -d @content.json [WEBSITE]
Run Code Online (Sandbox Code Playgroud)

content.json顾名思义,该文件对 JSON 对象进行编码。

我的代码如下所示:

fn get_response() -> Result<String, Box<dyn Error>> {
    let content = std::fs::read_to_string("content.json").unwrap();
    let client = reqwest::blocking::Client::new();
    client
        .post([WEBSITE])
        .basic_auth([USERNAME], Some([PASSWORD]))
        .json(&content)
        .send()?
        .text()?
Run Code Online (Sandbox Code Playgroud)

虽然该curl命令有效,但运行 Rust 代码时,我在响应中收到“格式错误的请求有效负载”错误消息。不幸的是,我无法控制该网站,因此无法在那里调试它。

我的问题是:我是否做了明显错误的事情?如果没有明显的问题,我应该尝试哪些选项(例如附加标头)?(当然,我已经尝试了一些东西,但没有任何效果)

json http-post rust reqwest

8
推荐指数
1
解决办法
2万
查看次数

是否可以同时获取 reqwest 响应的文本和 JSON

从 reqwest 文档中,您可以获取反序列化的 json或请求响应中的正文。

我不知道如何同时获得它们。我的要求是我想要解码后的 json 在代码中使用,但想要打印出文本以进行调试。不幸的是,尝试获取这两个函数会给您带来有关使用移动值的错误,因为这两个函数都拥有请求的所有权。克隆请求似乎也不可能。

这是我希望能够执行的操作的示例,但第 4 行无效,因为它使用了在第 1 行移动的响应。

let posts: Vec<Post> = match response.json::<PostList>().await {
    Ok(post_list) => post_list.posts,
    Err(e) => {
        let text = response.text().await.unwrap();
        println!("Error fetching posts: {}, {}", e, text);
        Vec::new()
    }
}; 
Run Code Online (Sandbox Code Playgroud)

rust reqwest

8
推荐指数
1
解决办法
2296
查看次数

将 reqwest bytes_stream 复制到 tokio 文件

我正在尝试将使用 reqwest 下载的文件复制到 tokio 文件中。该文件太大,无法存储在内存中,因此需要通过bytes_stream()而不是bytes()

我尝试过以下操作

let mut tmp_file = tokio::fs::File::from(tempfile::tempfile()?);
let byte_stream = reqwest::get(&link).await?.bytes_stream();
tokio::io::copy(&mut byte_stream, &mut tmp_file).await?;
Run Code Online (Sandbox Code Playgroud)

这失败了,因为

    |
153 |     tokio::io::copy(&mut byte_stream, &mut tmp_file).await?;
    |     --------------- ^^^^^^^^^^^^^^^^ the trait `tokio::io::AsyncRead` is not implemented for `impl Stream<Item = Result<bytes::bytes::Bytes, reqwest::Error>>`
    |     |
    |     required by a bound introduced by this call
Run Code Online (Sandbox Code Playgroud)

有什么方法可以在流上获取特征 AsyncRead 或以其他方式将此数据复制到文件中?我使用 tokio 文件的原因是我稍后需要从中进行 AsyncRead 。也许复制到常规 std::File 然后将其转换为 tokio::fs::File 是有意义的?

rust rust-tokio reqwest

8
推荐指数
1
解决办法
1850
查看次数

为什么当 openssl 不在依赖关系图中时,openssl 上的交叉编译构建会失败?

使用 构建我的 Rust lambda 时cross,我收到此错误:

error: failed to run custom build command for `openssl-sys v0.9.58`
Run Code Online (Sandbox Code Playgroud)

当我查看我的依赖关系图时,openssl 甚至没有列出!这是怎么回事?

这是我的 Cargo.toml 文件:

[package]
name = "my_lambda"
version = "0.1.0"
authors = ["Thomas <>"]
edition = "2018"
autobins = false

[[bin]]
name = "bootstrap"
path = "src/main.rs"

[dependencies]
lambda_runtime = "0.2.1"
mysql = { version = "20.1.0" }
reqwest = { version = "0.9.24" }
serde = { version = "^1.0", features = ["derive"] }
Run Code Online (Sandbox Code Playgroud)

交叉文件

[target.x86_64-unknown-linux-gnu]
image = "lambci/lambda:build-provided"

[target.x86_64-unknown-linux-musl] …
Run Code Online (Sandbox Code Playgroud)

openssl rust rust-cargo aws-lambda reqwest

7
推荐指数
1
解决办法
281
查看次数