Error handling 如何处理铁锈上的装箱和连锁错误?
我有很多代理uri(http和socks5),我使用reqwest通过这些代理发送一些http请求,如果他不工作,我想删除一个代理 代理中的代理的Error handling 如何处理铁锈上的装箱和连锁错误?,error-handling,rust,hyper,reqwest,Error Handling,Rust,Hyper,Reqwest,我有很多代理uri(http和socks5),我使用reqwest通过这些代理发送一些http请求,如果他不工作,我想删除一个代理 代理中的代理的{ 让proxy=match proxy::all(proxy\u url){ 确定(代理)=>代理, 错误(e)=>{ eprintln!(“创建代理失败!{:?}”,e); 继续; } }; 让client=匹配client::builder() .代理(proxy) .build() 让客户端=匹配客户端{ Ok(客户端)=>客户端, 错误(e)
{
让proxy=match proxy::all(proxy\u url){
确定(代理)=>代理,
错误(e)=>{
eprintln!(“创建代理失败!{:?}”,e);
继续;
}
};
让client=匹配client::builder()
.代理(proxy)
.build()
让客户端=匹配客户端{
Ok(客户端)=>客户端,
错误(e)=>{
eprintln!(“构建客户端失败!{:?}”,e);
继续;
}
}
环路{
匹配client.get(&config.endpoint).send().wait{
Ok()=>{}
错误(e)=>{
如果e.is\u proxy\u error(){//此方法不存在
eprintln!(“删除代理…”);
打破
}否则{
eprintln!(“客户端错误!{:?}”,e);
}
}
}
}
}
我得到了很多种Reqwest::Error
reqwest::Error { kind: Request, url: "http://example.com/", source: hyper::Error(Connect, "socks connect error: Invalid response version") }
reqwest::Error { kind: Request, url: "http://example.com/", source: hyper::Error(Connect, "socks connect error: Proxy server unreachable") }
reqwest::Error { kind: Request, url: "http://example.com/", source: hyper::Error(Connect, "socks connect error: Connection refused") }
reqwest::Error { kind: Request, url: "http://example.com/", source: hyper::Error(Connect, "socks connect error: Connection reset by peer (os error 104)") }
在大多数情况下,错误消息是明确的,但是我如何以不同的方式处理它们呢?
reqwest::Error
具有内部字段,该字段是私有的,因此我无法访问他。
如果我得到reqwest::Error
的源代码,我就有一个框
,我不能把它当作hyper::Error你可以把Error::source()
的结果下推到一个具体的错误类型,例如
reqwest::Error { kind: Request, url: "http://example.com/", source: hyper::Error(Connect, "socks connect error: Invalid response version") }
reqwest::Error { kind: Request, url: "http://example.com/", source: hyper::Error(Connect, "socks connect error: Proxy server unreachable") }
reqwest::Error { kind: Request, url: "http://example.com/", source: hyper::Error(Connect, "socks connect error: Connection refused") }
reqwest::Error { kind: Request, url: "http://example.com/", source: hyper::Error(Connect, "socks connect error: Connection reset by peer (os error 104)") }
use std::error::Error;
...
Err(reqwest_error) => {
let hyper_error: Option<&hyper::Error> = reqwest_error
.source()
.unwrap()
.downcast_ref();
...
}