求Flutter中curl --resolve的等效实现及本地DNS配置方案
在Flutter中实现类似curl --resolve的HTTPS请求(指定IP+域名SSL验证)
要实现和curl --resolve example.com:443:192.168.1.55 https://example.com等效的效果,核心是强制将域名解析到指定IP,同时保留域名的SSL证书验证逻辑,下面提供两种实用实现方式:
方法1:用dart:io原生HttpClient手动配置
直接通过原生HttpClient控制连接目标和SSL验证主机,适合轻量场景:
import 'dart:io'; import 'dart:convert'; Future<void> sendCustomHttpsRequest() async { const targetDomain = 'example.com'; const targetIp = '192.168.1.55'; const targetPort = 443; final client = HttpClient(); try { // 直接连接指定IP和端口 final request = await client.getUrl(Uri.parse('https://$targetIp:$targetPort')); // 设置Host头,让服务器识别请求的域名 request.headers.set('Host', targetDomain); // 强制SSL验证使用目标域名,避免IP与证书域名不匹配的错误 request.connectionInfo = HttpClientConnectionInfo( host: targetDomain, port: targetPort, ); final response = await request.close(); final responseBody = await response.transform(utf8.decoder).join(); print('状态码: ${response.statusCode}'); print('响应内容: $responseBody'); } catch (e) { print('请求失败: $e'); } finally { client.close(); } }
方法2:用Dio拦截器配置(适合项目级场景)
如果项目使用Dio网络库,通过自定义HttpClientAdapter实现域名定向解析,代码更易复用:
import 'dart:io'; import 'package:dio/dio.dart'; import 'package:dio/io.dart'; void setupDioWithCustomResolve() { const targetDomain = 'example.com'; const targetIp = '192.168.1.55'; final dio = Dio(); // 替换默认的HttpClient适配器,注入自定义解析逻辑 dio.httpClientAdapter = IOHttpClientAdapter( createHttpClient: () { final client = HttpClient(); // 针对目标域名,强制解析到指定IP client.findProxy = (uri) { if (uri.host == targetDomain) { return 'PROXY $targetIp:443'; } return 'DIRECT'; }; return client; }, ); // 直接用域名发起请求,底层会自动路由到指定IP dio.get('https://$targetDomain').then((response) { print('状态码: ${response.statusCode}'); print('响应数据: ${response.data}'); }).catchError((e) { print('请求失败: $e'); }); }
关键注意事项
- 若目标服务器使用自签名证书,可临时添加
badCertificateCallback跳过验证(生产环境禁止):client.badCertificateCallback = (X509Certificate cert, String host, int port) { return host == targetDomain; // 仅允许目标域名的自签名证书 }; - 必须确保目标IP的443端口开放,且服务器已配置对应域名的SSL证书。
内容的提问来源于stack exchange,提问作者Shashi kumar S
相关产品推荐
相关产品推荐

