From b30cb6bde79c084b1e3233efa576123bd938dde4 Mon Sep 17 00:00:00 2001 From: wanghongenpin Date: Wed, 27 Dec 2023 17:02:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86header=E5=A4=A7=E5=B0=8F?= =?UTF-8?q?=E5=86=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/network/http/codec.dart | 1 + lib/network/http/http_headers.dart | 52 +++++++++++++++++------------- lib/ui/content/panel.dart | 11 ++++--- 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/lib/network/http/codec.dart b/lib/network/http/codec.dart index b197e75..9cc8e76 100644 --- a/lib/network/http/codec.dart +++ b/lib/network/http/codec.dart @@ -195,6 +195,7 @@ abstract class HttpCodec implements Codec { //请求头 message.headers.remove(HttpHeaders.TRANSFER_ENCODING); + message.headers.remove(HttpHeaders.CONTENT_LENGTH); if (body != null && body.isNotEmpty) { message.headers.contentLength = body.length; } diff --git a/lib/network/http/http_headers.dart b/lib/network/http/http_headers.dart index 09bf2fa..fa9abed 100644 --- a/lib/network/http/http_headers.dart +++ b/lib/network/http/http_headers.dart @@ -29,36 +29,39 @@ class HttpHeaders { final LinkedHashMap> _headers = LinkedHashMap>(); // 由小写标头名称键入的原始标头名称。 - final Map> _originalHeaderNames = {}; + final Map _originalHeaderNames = {}; HttpHeaders(); ///设置header。 void set(String name, String value) { - _headers[name.toLowerCase()] = [value]; - _originalHeaderNames[name] = [value]; + var original = _originalHeaderNames[name.toLowerCase()]; + if (original != null && original != name) { + _headers.remove(original); + } + + _headers[name] = [value]; + _originalHeaderNames[name.toLowerCase()] = name; } ///添加header。 void add(String name, String value) { - if (!_headers.containsKey(name.toLowerCase())) { - _headers[name.toLowerCase()] = []; - _originalHeaderNames[name] = []; - } - - _headers[name.toLowerCase()]?.add(value); - _originalHeaderNames[name]?.add(value); + addValues(name, [value]); } ///添加header。 void addValues(String name, List values) { - if (!_headers.containsKey(name.toLowerCase())) { - _headers[name.toLowerCase()] = []; - _originalHeaderNames[name] = []; + var original = _originalHeaderNames[name.toLowerCase()]; + if (original != null && original != name) { + var old = _headers.remove(original); + _headers[name] = List.from(old!); + } + if (_headers[name] == null) { + _headers[name] = []; } - _headers[name.toLowerCase()]?.addAll(values); - _originalHeaderNames[name]?.addAll(values); + _headers[name]?.addAll(values); + _originalHeaderNames[name.toLowerCase()] = name; } ///从headers中添加 @@ -71,17 +74,20 @@ class HttpHeaders { } String? get(String name) { - return _headers[name.toLowerCase()]?.first; + return getList(name)?.first; } List? getList(String name) { - return _headers[name.toLowerCase()]; + var originalHeaderName = _originalHeaderNames[name.toLowerCase()]; + if (originalHeaderName == null) { + return null; + } + return _headers[originalHeaderName]; } void remove(String name) { - _headers.remove(name.toLowerCase()); - _originalHeaderNames.remove(name); - _originalHeaderNames.remove(name.toLowerCase()); + var originalHeaderName = _originalHeaderNames.remove(name.toLowerCase()); + _headers.remove(originalHeaderName); } int? getInt(String name) { @@ -113,10 +119,10 @@ class HttpHeaders { String get cookie => get(Cookie) ?? ""; void forEach(void Function(String name, List values) f) { - _originalHeaderNames.forEach(f); + _headers.forEach(f); } - Iterable>> get entries => _originalHeaderNames.entries; + Iterable>> get entries => _headers.entries; set contentType(String contentType) => set(CONTENT_TYPE, contentType); @@ -179,6 +185,6 @@ class HttpHeaders { @override String toString() { - return 'HttpHeaders{$_originalHeaderNames}'; + return 'HttpHeaders{$_headers}'; } } diff --git a/lib/ui/content/panel.dart b/lib/ui/content/panel.dart index c7538c0..4832d16 100644 --- a/lib/ui/content/panel.dart +++ b/lib/ui/content/panel.dart @@ -247,11 +247,14 @@ class NetworkTabState extends State with SingleTickerProvi var headers = []; message?.headers.forEach((name, values) { for (var v in values) { - headers.add(Row(children: [ - Text('$name: ', + headers.add(SelectionArea( + child: Row(children: [ + SelectableText('$name: ', + contextMenuBuilder: contextMenu, style: const TextStyle(fontWeight: FontWeight.w500, color: Colors.deepOrangeAccent, fontSize: 14)), - Expanded(child: Text(v, style: textStyle, maxLines: 8)), - ])); + Expanded( + child: SelectableText(v, style: textStyle, contextMenuBuilder: contextMenu, maxLines: 8, minLines: 1)), + ]))); headers.add(const Divider(thickness: 0.1)); } });