标签: reqwest

为什么 reqwest 需要安装 OpenSSL?

我试图让一个基本的reqwesthttp 请求像这样

extern crate reqwest;
extern crate url;

use url::Url;

fn main() {
    let resp = reqwest::get("http://google.com".parse::<Url>().unwrap());
    println!("{:?}", resp.unwrap())
}
Run Code Online (Sandbox Code Playgroud)

但是,这会产生错误

找不到 OpenSSL 安装目录,-sys如果不了解此信息,此板条箱将无法继续。如果安装了 OpenSSL 并且此 crate 无法找到它,则可OPENSSL_DIR以为编译过程设置环境变量。

确保您还安装了 openssl 的开发包。例如,libssl-dev在 Ubuntu 或openssl-develFedora 上。

...

嗯,这很容易解决。一个调用sudo apt install libssl-devsudo apt install pkg-config它的工作。但我仍然不明白这里到底出了什么问题。我认为cargo应该照顾依赖。为什么我现在要手动狩猎它们apt

ssl openssl rust reqwest

5
推荐指数
1
解决办法
1227
查看次数

如何使用流解压缩 Reqwest/Hyper 响应?

我需要下载一个 60MB 的 ZIP 文件并提取其中的唯一文件。我想下载它并使用流提取它。如何使用 Rust 实现这一点?

fn main () {
    let mut res = reqwest::get("myfile.zip").unwrap();
    // extract the response body to myfile.txt
}
Run Code Online (Sandbox Code Playgroud)

在 Node.js 中,我会做这样的事情:

http.get('myfile.zip', response => {
  response.pipe(unzip.Parse())
  .on('entry', entry => {
    if (entry.path.endsWith('.txt')) {
      entry.pipe(fs.createWriteStream('myfile.txt'))
    }
  })
})
Run Code Online (Sandbox Code Playgroud)

rust reqwest

4
推荐指数
2
解决办法
1920
查看次数

如何修复 reqwest json 解码错误?

当我运行以下代码时:

use exitfailure::ExitFailure;
use reqwest::Url;
use serde_derive::{Deserialize, Serialize};
use std::env;

#[derive(Serialize, Deserialize, Debug)]
struct CompanyInfo {
    country: String,
    currency: String,
    exchange: String,
    ipo: String,
    marketCapitalization: u128,
    name: String,
    phone: String,
    shareOutstanding: f64,
    ticker: String,
    weburl: String,
    logo: String,
    finnhubIndustry: String,
}

impl CompanyInfo {
    async fn get(symbol: &String, api_key: &String) -> Result<Self, ExitFailure> {
        let url = format!(
            "https://finnhub.io/api/v1/stock/profile2?symbol={}&token={}",
            symbol, api_key
        );

        let url = Url::parse(&*url)?;
        let res = reqwest::get(url).await?.json::<CompanyInfo>().await?;

        Ok(res)
    }
}

#[tokio::main]
async fn main() -> Result<(), ExitFailure> …
Run Code Online (Sandbox Code Playgroud)

asynchronous rust async-await reqwest

4
推荐指数
1
解决办法
4561
查看次数

如何将 Rust Result&lt;T, E&gt; 的错误泛化为 Result&lt;T, Box&lt;dyn std::error::Error&gt;&gt;?

我正在尝试泛化函数Result返回的a reqwest::blocking::get。它返回 aResult<reqwest::blocking::Response, reqwest::Error>但调用它的函数返回 a Result<reqwest::blocking::Response, Box<dyn std::error::Error>

  • 为什么我的第一次尝试无法编译?
  • 进行这种转换的最惯用的方法是什么?

这是第一次尝试:

fn get_example_fails() -> Result<Response, Box<dyn Error>> {
        let result = blocking::get("http://example.com");
        result.map_err(|error| Box::new(error))
    }

Run Code Online (Sandbox Code Playgroud)

它有以下错误,我不知道如何修复,但觉得通过一些小的调整可能会更惯用 - 但我不确定要调整什么:

error[E0308]: mismatched types
   --> src/bittrex.rs:143:9
    |
141 |     fn get_example_fails() -> Result<Response, Box<dyn Error>> {
    |                               -------------------------------- expected `Result<reqwes
t::blocking::Response, Box<(dyn StdError + 'static)>>` because of return type
142 |         let result = blocking::get("http://example.com");
143 |         result.map_err(|error| Box::new(error))
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected trait object `dyn StdError`, 
found …
Run Code Online (Sandbox Code Playgroud)

rust reqwest rust-result

4
推荐指数
1
解决办法
3742
查看次数

试图导入`reqwest :: async`错误,指出`async`是一个保留关键字

我想使用reqwestcrate 进行异步HTTP请求.我有以下代码:

// see https://docs.rs/reqwest/*/reqwest/async/index.html
use reqwest::async::Client;
Run Code Online (Sandbox Code Playgroud)

当我尝试编译我的代码时,我收到以下错误:

error: expected identifier, found reserved keyword `async`
 --> src/main.rs:1:14
  |
1 | use reqwest::async::Client;
  |              ^^^^^ expected identifier, found reserved keyword
Run Code Online (Sandbox Code Playgroud)

如何从async模块导入?

syntax rust reqwest rust-2018

3
推荐指数
1
解决办法
163
查看次数

特性 `std::future::Future` 没有为 `std::result::Result&lt;reqwest::Response, reqwest::Error&gt;` 实现

我正在尝试运行基本reqwest 示例

extern crate reqwest;
extern crate tokio;

#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
    let res = reqwest::Client::new()
        .get("https://hyper.rs")
        .send()
        .await?;

    println!("Status: {}", res.status());

    let body = res.text().await?;

    println!("Body:\n\n{}", body);

    Ok(())
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

   --> src/main.rs:6:15
    |
6   |       let res = reqwest::Client::new()
    |  _______________^
7   | |         .get("https://hyper.rs")
8   | |         .send()
9   | |         .await?;
    | |______________^ the trait `std::future::Future` is not implemented for `std::result::Result<reqwest::Response, reqwest::Error>`
Run Code Online (Sandbox Code Playgroud)

锈版: rustc 1.39.0 (4560ea788 2019-11-04)

库版本:

reqwest = "0.9.22" …
Run Code Online (Sandbox Code Playgroud)

rust async-await rust-tokio reqwest

3
推荐指数
1
解决办法
1804
查看次数

反序列化reqwest响应时找不到json方法

我对 Rust 很陌生,我似乎无法找到这个问题的解决方案。我正在尝试以 json 形式获取 get 请求的响应。

#[macro_use]
extern crate serde;
extern crate serde_derive;
extern crate reqwest;
use reqwest::Error;

fn main(){
    #[derive(Deserialize)]

struct Ip {
    origin: String,
}

let json: Ip = reqwest::get("http://httpbin.org/ip").json();
//reqwest::get("http://httpbin.org/ip")?.json()?;
}
Run Code Online (Sandbox Code Playgroud)

这是cargo.toml

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
serde_derive = "1.0"
reqwest = { version = "0.10", features = ["blocking"] }
Run Code Online (Sandbox Code Playgroud)

我不断收到的错误是 json 错误

另外,如果我使用

reqwest::get("http://httpbin.org/ip")?.json()?;
Run Code Online (Sandbox Code Playgroud)

(添加问号)我收到另一个错误说

cannot use the `?` operator in a function that returns `()`
this function …
Run Code Online (Sandbox Code Playgroud)

json rust json-deserialization serde reqwest

3
推荐指数
1
解决办法
1211
查看次数

无法调用返回结果的函数:找到不透明类型 impl std::future::Future

我无法从 a 返回函数的结果Result。每个教程只展示如何使用 Result,而不展示如何从中返回值。

fn main(){
    let mut a: Vec<String> = Vec::new();
    a = gottem();
    println!("{}", a.len().to_string());
    //a.push(x.to_string()
}
async fn gottem() -> Result<Vec<String>, reqwest::Error> {
    let mut a: Vec<String> = Vec::new();
    let res = reqwest::get("https://www.rust-lang.org/en-US/")
        .await?
        .text()
        .await?;
    Document::from(res.as_str())
        .find(Name("a"))
        .filter_map(|n| n.attr("href"))
        .for_each(|x| println!("{}", x));
    Ok(a)
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

fn main(){
    let mut a: Vec<String> = Vec::new();
    a = gottem();
    println!("{}", a.len().to_string());
    //a.push(x.to_string()
}
async fn gottem() -> Result<Vec<String>, reqwest::Error> {
    let mut a: Vec<String> = Vec::new();
    let …
Run Code Online (Sandbox Code Playgroud)

rust reqwest rust-result

3
推荐指数
1
解决办法
4183
查看次数

为什么 reqwest 下载的 PNG 图像会损坏?

我按照 Rust Cookbook 中提到的代码https://rust-lang-nursery.github.io/rust-cookbook/web/clients/download.html通过 HTTP GET 请求以异步方式下载文件。

我的代码如下:

#[tokio::main]
async fn main() -> Result<()> {

    let object_path = "logos/rust-logo-512x512.png";
    let target = format!("https://www.rust-lang.org/{}", object_path);  
    let response = reqwest::get(&target).await?;

    let mut dest = {
    
        let fname = response
            .url()
            .path_segments()
            .and_then(|segments| segments.last())
            .and_then(|name| if name.is_empty() { None } else { Some(name) })
            .unwrap_or("tmp.bin");
            
            
        println!("file to download: '{}'", fname);

        let object_prefix = &object_path[..object_path.rfind('/').unwrap()];
        let object_name = &object_path[object_path.rfind('/').unwrap()+1..];
        let output_dir = format!("{}/{}", env::current_dir().unwrap().to_str().unwrap().to_string(), object_prefix);
        fs::create_dir_all(output_dir.clone())?;

        println!("will be located under: '{}'", output_dir.clone()); …
Run Code Online (Sandbox Code Playgroud)

http-get rust async-await reqwest

3
推荐指数
1
解决办法
2467
查看次数

为 reqwest 客户端构建具有多个值的参数的查询字符串

我正在尝试使用构建器的 query() 方法为 reqwest 客户端构建查询字符串。但其中一个参数必须是像这样编码的多个值

 ?dt=t&dt=at&dt=m
Run Code Online (Sandbox Code Playgroud)

我不知道怎么办。

use reqwest::blocking::Client;
use serde_json::{json, Value as JsonValue};


fn main() {
    let query = json!({
        "client": "gtx",
        "ie": "UTF-8",   // input encoding
        "oe": "UTF-8",   // output encoding
        "sl": "auto",    // source language
        "tl": "en",      // target language
        "dt": ["t", "at", "m"],  // <<<<< ERROR
        "q": "salut les gars. ca va? on y va!",       // text to translate
    });
    let client = Client::new();
    let response = client.get("https://translate.googleapis.com/translate_a/single")
                         .query(&query)
                         .send()
                         .unwrap();
    if response.status().is_success() {
        let body: …
Run Code Online (Sandbox Code Playgroud)

urlencode rust reqwest

3
推荐指数
1
解决办法
4479
查看次数