如何在Dart中使用http库或HttpClient发起OPTIONS请求
Dart http 库发起 OPTIONS 请求的实现方案
dart 的 http 库没有封装 OPTIONS 类型请求的快捷调用方法,你可以通过通用 Request 类实现任意 HTTP 方法的请求,步骤如下:
基础 OPTIONS 请求实现
import 'package:http/http.dart' as http; // 1. 构造 OPTIONS 请求对象 final request = http.Request('OPTIONS', url); // 2. 添加请求头 request.headers.addAll(postHeaders); // 若 OPTIONS 请求需要携带 body 可以加下面这行,常规 OPTIONS 请求不需要可省略 // request.body = postBody; // 3. 发送请求并将流式响应转为普通 Response 对象,和你之前调用 post 获得的 response 结构完全一致 final streamedResponse = await request.send(); final response = await http.Response.fromStream(streamedResponse);
封装为快捷调用方法
你可以参考官方 post、get 方法的实现,封装自己的 options 调用,后续使用和原有快捷方法完全一致:
Future<http.Response> options(Uri url, {Map<String, String>? headers, Object? body}) async { final request = http.Request('OPTIONS', url); if (headers != null) { request.headers.addAll(headers); } if (body != null) { if (body is String) { request.body = body; } else if (body is List<int>) { request.bodyBytes = body; } else if (body is Map<String, String>) { request.bodyFields = body; } } final streamedResponse = await request.send(); return http.Response.fromStream(streamedResponse); } // 调用方式和你原有的 post 请求完全一致 final response = await options(url, headers: postHeaders, body: postBody);
通用自定义 HTTP 方法请求说明
如果需要发起其他未封装的 HTTP 方法请求,只需替换 Request 构造的第一个参数字符串即可,比如 'PATCH'、'HEAD' 等,所有标准HTTP方法都支持。
内容的提问来源于stack exchange,提问作者Suragch
相关产品推荐
相关产品推荐

