使用hyper 0.14通过TLS发送POST请求出现类型不匹配该如何解决?
错误原因
你声明的client类型为client::Client<_, hyper::Body>,要求传入的请求必须是Request<Body>类型,你构造请求时调用.body(())传入了单元类型(),导致请求类型为Request<()>,与客户端要求的参数类型不匹配,因此触发类型错误。
修复方案
- 无请求体的场景:将body参数替换为
Body::empty()即可,修改后的请求构造代码如下:
let req = Request::builder().method(Method::POST) .uri("url") .body(Body::empty()) .unwrap();
- 有请求体的场景:将需要发送的内容转换为
Body类型传入即可,例如发送JSON请求体的写法:
let req = Request::builder().method(Method::POST) .uri("url") .header("Content-Type", "application/json") .body(Body::from(r#"{"key":"value"}"#)) .unwrap();
额外注意:你代码中的match分支写法存在错误,
client.request().await返回的是Result<Response<Body>, hyper::Error>类型,不存在Method、TooLarge的直接分支匹配,你可以通过hyper::Error::is_parse()、hyper::Error::is_payload_too_large()等方法判断错误类型做对应处理。
内容的提问来源于stack exchange,提问作者Abhilash Gopalakrishna
相关产品推荐
相关产品推荐

