概要
忘れちゃいそうなのでここにメモメモ。
HTTPSアクセスが必要な処理があって、開発時なのでサーバ側にオレオレ証明書を置いて動かしているとします。
その状態で https アクセスをすると
final response = await http.post( Uri.https( 'dokokano.server.dev', '/path/to/api', ), body: json.encode(request), headers: {'Content-Type': 'application/json'}, );
CERTIFICATE_VERIFY_FAILED
というエラーが返ってきます。自己証明書だからですね。
とかいって、正規の証明書を仕込むのはちょっと面倒なので、開発時はこのCERTチェックをバイパスしてほしい。
そういう場合は、以下のようにするといいかもしれません。
まず、HttpOverrides
を継承したクラスを用意します。こんな感じ。
class PermitInvalidCertification extends HttpOverrides { @override HttpClient createHttpClient(SecurityContext? context) { return super.createHttpClient(context)..badCertificateCallback = (cert, host, port) => true; } }
このクラスのインスタンスをリクエスト出す前に HttpOverrides.global
に設定します。
HttpOverrides.global = PermitInvalidCertification(); final response = await http.post( Uri.https( 'dokokano.server.dev', '/path/to/api', ), body: json.encode(request), headers: {'Content-Type': 'application/json'}, );
これでエラーが出ずにリクエストが飛ばせます。後は開発時のみ有効になるように調整してやればいいですね。
参考情報
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場