Tauri应用忽略HTTPS SSL证书请求的可行方案问询
解决方案:Tauri中忽略HTTPS证书验证并避免卡顿
方案1:配置Tauri官方HTTP模块忽略证书验证
你之前使用Tauri HTTP模块时未配置证书忽略选项,导致TLS错误。Tauri的getClient支持传入ClientOptions来禁用证书校验:
import { getClient, ClientOptions } from '@tauri-apps/api/http'; // 配置忽略无效证书和主机名(IP地址请求时可能需要后者) const clientOptions: ClientOptions = { danger_accept_invalid_certs: true, danger_accept_invalid_hostnames: true }; const client = await getClient(clientOptions); try { const response = await client.delete('https://192.168.100.100/'); console.log(response); } catch (err) { console.error(err); }
该方案基于Tauri官方API,无第三方依赖,兼容性和性能更有保障。
方案2:修复Axios+Tauri适配器的证书忽略配置
axios-tauri-adapter默认使用无配置的Tauri HTTP客户端,需手动传入带证书忽略设置的客户端:
import axios from 'axios'; import axiosTauriAdapter from 'axios-tauri-adapter'; import { getClient, ClientOptions } from '@tauri-apps/api/http'; async function initAxiosClient() { const clientOptions: ClientOptions = { danger_accept_invalid_certs: true, danger_accept_invalid_hostnames: true }; const tauriClient = await getClient(clientOptions); return axios.create({ adapter: axiosTauriAdapter(tauriClient) // 传入配置好的Tauri客户端 }); } // 初始化Axios客户端 let axiosClient; initAxiosClient().then(client => { axiosClient = client; }); document.getElementById("get-ata").addEventListener("click", async () => { try { const response = await axiosClient.get("https://192.168.100.100/"); console.log(response); } catch (error) { console.log("Error: ", error); } });
通过此配置,Axios会使用带证书忽略规则的Tauri客户端发起请求,解决证书校验失败问题。
方案3:将Rust同步命令改为异步(低改动成本)
你现有的Rust命令是同步执行的,导致UI卡顿。只需小幅修改为异步命令,使用reqwest的异步客户端即可:
use tauri::async_runtime; use reqwest::{Client, Error, Response}; use std::time::Duration; // 标记为异步命令 #[tauri::command(async)] async fn api_post_req(url: &str, auth: &str, body: String, timeout: f32) -> String { // 构建异步客户端 let client = Client::builder() .danger_accept_invalid_certs(true) .build() .unwrap(); let time: Duration = Duration::from_secs_f32(timeout); let result = client .post(url) .header("authorization", auth) .body(body) .timeout(time) .send() .await; // 异步等待请求完成 convert_response(result).await } // 异步转换响应结果 async fn convert_response(result: Result<Response, Error>) -> String { match result { Ok(response) => { match response.text().await { // 异步读取响应文本 Ok(text) => text, Err(err) => format!("Something messed up! but result was ok. Rust error: {}", err) } }, Err(error) => format!("Rust error: {}", error) } }
核心改动点:
- 命令宏改为
#[tauri::command(async)] - 请求发送和响应读取添加
.await标记异步执行 - 转换函数改为异步函数
修改后命令会在后台线程执行,不会阻塞UI,彻底解决卡顿问题。
未来扩展:支持自定义证书
当需要信任自定义证书时,只需调整客户端配置:
- Tauri HTTP模块:在
ClientOptions的ca_certificates字段传入证书内容 - Rust reqwest客户端:使用
Client::builder().add_root_certificate()添加证书
内容的提问来源于stack exchange,提问作者kijada
相关产品推荐
相关产品推荐

