You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust使用reqwest发起GET请求打印结果,impl Future无Debug报错如何解决

问题原因

你的代码存在三处核心问题:

  • 你调用的是reqwest默认的异步API,reqwest::get()返回的是还未执行的Future对象,直接打印就会触发「未实现Debug trait」的报错。异步场景需要搭配运行时使用,简单请求场景更推荐直接用reqwest的阻塞客户端降低复杂度。
  • 你把curl的-u参数直接拼接在请求URL里是错误用法,-u对应的是HTTP Basic Auth认证逻辑,需要单独配置到请求头中,不能直接作为URL的一部分。
  • #[derive(Debug)]加在main函数上是无效语法,没有任何作用,可以直接删除。
前置依赖配置

先修改你的Cargo.toml引入必要的依赖特性:

[dependencies]
serde_json = "1.0"
reqwest = { version = "0.11", features = ["blocking", "json"] }
修改后的完整代码
#[macro_use]
extern crate serde_json;

use reqwest::blocking::Client;
use reqwest::Error;

fn main() -> Result<(), Error> {
    //测试JSON美化打印
    let obj = json!({"data":{"updated_at":"2021-09-17T17:41:05.677631986Z","items":[{"signed_at":"2015-07-30T03:26:13Z","height":0}],"pagination":null},"error":false,"error_message":null,"error_code":null});
  
    //美化打印上述JSON,该部分运行正常
    println!("{}", serde_json::to_string_pretty(&obj).unwrap());

    //初始化阻塞HTTP客户端
    let client = Client::new();
    //API密钥末尾加冒号对应你要的跳过密码校验逻辑
    let api_key = "my_private_key:";
    let request_url = "https://api.xyz.com/v1/1/";

    //发起带Basic Auth认证的GET请求
    let response = client
        .get(request_url)
        .basic_auth(api_key, None::<String>)
        .send()?;

    //打印响应状态码
    println!("响应状态:{:?}", response.status());
    //解析响应为JSON格式
    let resp_json: serde_json::Value = response.json()?;
    //美化打印返回结果
    println!("响应内容:\n{}", serde_json::to_string_pretty(&resp_json).unwrap());

    Ok(())
}
补充说明

如果你确实需要使用异步写法,只需要把reqwest的features换回默认配置,给main函数加上#[tokio::main]标记、修改为异步函数,所有请求操作后加.await即可,阻塞写法更适合单接口请求的简单脚本场景。

内容的提问来源于stack exchange,提问作者marrowgari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:45:03