小编Sru*_*nde的帖子

反序列化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
查看次数

为什么来自 api.color.pizza 的 reqwest 响应返回意外的字节?

我正在尝试解析来自 GET 请求的响应,但输出似乎是随机字节。

此问题仅在我尝试此网站 ( https://api.color.pizza/v1/123123 )时发生,并且在尝试其他网站时响应符合预期。

在浏览器中测试,我知道正确的响应,并且在比较正确响应的字节(存储在变量中k)和来自 reqwest 的响应时,字节完全不同。

重现错误的代码如下:

fn main() -> Result<(), Box<dyn std::error::Error>> {
    //Expected output
    let k = r##"{"colors":[{"hex":"#123120","name":"Méi H?i Coal","rgb":{"r":18,"g":49,"b":32},"requestedHex":"#123123","luminance":29.48870965301805,"distance":3}]}"##;

    let request_url = "https://api.color.pizza/v1/123123";
    let resp = reqwest::blocking::get(request_url)?.text()?;

    println!("{}", resp);

    let r1 = resp.into_bytes();
    let r2 = String::from(k).into_bytes();
    assert_eq!(&r1[..], &r2[..]);

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

输出是:

fn main() -> Result<(), Box<dyn std::error::Error>> {
    //Expected output
    let k = r##"{"colors":[{"hex":"#123120","name":"Méi H?i Coal","rgb":{"r":18,"g":49,"b":32},"requestedHex":"#123123","luminance":29.48870965301805,"distance":3}]}"##;

    let request_url = "https://api.color.pizza/v1/123123";
    let resp = reqwest::blocking::get(request_url)?.text()?;

    println!("{}", resp);

    let r1 = resp.into_bytes(); …
Run Code Online (Sandbox Code Playgroud)

http rust reqwest

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

标签 统计

reqwest ×2

rust ×2

http ×1

json ×1

json-deserialization ×1

serde ×1