Rust新手求助:使用reqwest发起GET请求的代码无法运行
Rust新手求助:使用reqwest发起GET请求的代码无法运行
嘿,刚瞅了你的代码,问题其实都是新手常踩的小坑,我来给你捋捋~
首先,你的代码里用了?运算符来处理错误,但默认情况下Rust的main函数返回的是()(空类型),而?只能在返回Result类型的函数里用,这是第一个核心问题。
然后,你用了reqwest的阻塞客户端(reqwest::blocking),但如果Cargo.toml里没开启对应的特性,编译肯定会报错,这是第二个容易忽略的点。
给你修正后的可运行代码:
use reqwest; use std::io::Read; // 把main函数的返回类型改成Result,这样就能用?处理错误了 fn main() -> Result<(), Box<dyn std::error::Error>> { let mut res = reqwest::blocking::get("https://myip.wtf/text")?; let mut body = String::new(); res.read_to_string(&mut body)?; println!("{}", body); Ok(()) // 最后要返回Ok(()),符合Result的返回要求 }
另外,别忘了在你的Cargo.toml里正确配置reqwest的依赖,必须加上blocking特性:
[dependencies] reqwest = { version = "0.11", features = ["blocking"] }
再给你唠唠为啥要改这些:
- 把main改成返回
Result<(), Box<dyn std::error::Error>>,相当于告诉Rust这个函数可能会出错,?运算符就能自动把错误往上抛,不用手动写一堆match处理,新手用起来特别省心。 - 开启
blocking特性是因为reqwest默认只启用异步客户端,阻塞客户端是可选特性,必须显式开启才能用reqwest::blocking模块。
你按这个改完,运行cargo run应该就能正常拿到返回的IP内容啦~
内容来源于stack exchange




