因为reqwest_wasi不支持https请求,原因可能是(加密算法移植不好实现,证书库验证不好实现等,而且发对aes加密效率还行,但对rsa非对称加密效率极低,2048位加密"hello word"需要最快13分钟[普通机器])。
使用代理软件squid支持https · Issue #2 · WasmEdge/wasmedge_reqwest_demo · GitHub
但因为使用wasi是用wasmedge做faas实现,也就是轻量级业务,一般只要支持curd业务就行了,但生态毕竟有缺,一些基本功能不用wasi实现(rust x86平台依赖或操作系统依赖不好编译成wasi平台时),可以搭建基础常用功能,比如http正向代理软件,来实现https的请求。
首先安装,配置,启动squid(windows安装其它对应代理软件),可以参考使用squid让能上外网的linux(centos)代理内网liunx电脑上网_qwsaedca的博客-CSDN博客_squid -z。
注:squid的端口默认为3128,建议修改。主要在这两行代码上
reqwest::Proxy::https("http://10.0.182.172:3128")
reqwest::Proxy::http("http://10.0.182.172:3128")
例子:对百度的https访问
pub async fn baidu() -> Result<Response<Body>, anyhow::Error> {
// Some simple CLI args requirements...
let url = "https://www.baidu.com/baidu?tn=monline_7_dg&ie=utf-8&wd=repository";
let client = reqwest::Client::builder()
.proxy(reqwest::Proxy::https("http://10.0.182.172:3128")?)
.proxy(reqwest::Proxy::http("http://10.0.182.172:3128")?)
.build()?;
let body = client.get(url).send()
.await?
.text()
.await?;
println!("body = {:?}", body);
// let body="test".to_string();
Ok(response_build(&body))
}
意义在于平台级只用搭一个代理软件来代理https流量访问,对于N个wasm镜像运行,很有作用(否则就需要对https整个实现wasi平台支持,不过发现rsa加密过程[公私密钥生成时间太长],所以放弃了)。