我正面临Flutter Web的第一个大问题。
我必须通过对具有自签名ssl证书的服务器的邮寄呼叫,使用oauth2登录。
使用http和dio客户端发出请求,我收到了net :: ERR_CERT_AUTHORITY_INVALID。我在网上发现的唯一方法是使用HttpClient,它适用于android和IO,但dart:io在Web构建中不起作用。有没有一种方法可以信任我的ssl证书以获取Flutter Web?
// My simple line of code
var response = await client.post(authorizationEndpoint.toString(), body: body, headers: headers);
// What I am looking for
var response = await client.post(authorizationEndpoint.toString(),
body: body, headers: headers,
---> trustanyCA: true);
您可以使用https://pub.dev/packages/universal_io包。除了Android和iOS,它还支持网络。
dependencies:
universal_io: ^1.0.1
执行以下导入,而不是dart:io
:
import 'package:universal_io/io.dart';
其工作方式相同。
import 'package:universal_io/io.dart';
Future<void> main() async {
final request = HttpClient().getUrl(Uri.parse('https://example.com/path'));
if (request is BrowserHttpClientRequest) {
request.credentialsMode = BrowserHttpClientCredentialsMode.include;
}
final response = await request.close();
// ...
}
编辑:
尝试一下,因为它似乎不适用于String,请尝试使用Bytes
方法并遵循证书的路径。
ByteData data = await rootBundle.load('assets/raw/certificate.crt');
SecurityContext context = SecurityContext.defaultContext;
context.setTrustedCertificatesBytes(data.buffer.asUint8List());
client = HttpClient(context: context);