hex viewer

This commit is contained in:
wanghongenpin
2025-09-09 19:50:40 +08:00
parent a200c57b90
commit 853348f1d5
5 changed files with 62 additions and 10 deletions

View File

@@ -135,7 +135,7 @@ class RequestRewriteInterceptor extends Interceptor {
}
}
_updateRequest(HttpRequest request, RewriteItem item) {
Future<void> _updateRequest(HttpRequest request, RewriteItem item) async {
var paramTypes = [RewriteType.addQueryParam, RewriteType.removeQueryParam, RewriteType.updateQueryParam];
if (paramTypes.contains(item.type)) {
@@ -187,7 +187,7 @@ class RequestRewriteInterceptor extends Interceptor {
return;
}
_updateMessage(request, item);
await _updateMessage(request, item);
}
//修改消息

View File

@@ -481,10 +481,7 @@ class _BodyState extends State<_Body> {
return const Center(child: Text("video not support preview"));
}
if (type == ViewType.hex) {
return HighlightTextWidget(
text: message!.body!.map(intToHex).join(" "),
searchController: widget.searchController,
contextMenuBuilder: contextMenu);
return HexViewer(data: Uint8List.fromList(message!.body!));
}
if (type == ViewType.formUrl) {
@@ -589,3 +586,54 @@ enum ViewType {
return null;
}
}
class HexViewer extends StatelessWidget {
final Uint8List data;
final int bytesPerRow;
const HexViewer({super.key, required this.data, this.bytesPerRow = 16});
@override
Widget build(BuildContext context) {
return SelectableText(
_formatHex(data, bytesPerRow),
style: const TextStyle(fontFamily: 'Courier', fontSize: 12),
);
}
String _formatHex(Uint8List data, int bytesPerRow) {
final StringBuffer buffer = StringBuffer();
for (int i = 0; i < data.length; i += bytesPerRow) {
// Address
buffer.write(i.toRadixString(16).padLeft(8, '0'));
buffer.write(' ');
// Hex values
for (int j = 0; j < bytesPerRow; j++) {
if (i + j < data.length) {
buffer.write(data[i + j].toRadixString(16).padLeft(2, '0'));
} else {
buffer.write(' ');
}
buffer.write(' ');
}
buffer.write(' ');
// ASCII representation
for (int j = 0; j < bytesPerRow; j++) {
if (i + j < data.length) {
final byte = data[i + j];
if (byte >= 32 && byte <= 126) {
buffer.write(String.fromCharCode(byte));
} else {
buffer.write('.');
}
}
}
buffer.writeln();
}
return buffer.toString();
}
}

View File

@@ -102,7 +102,11 @@ class _SocketLaunchState extends State<SocketLaunch> with WindowListener, Widget
windowManager.setPreventClose(false);
await windowManager.destroy();
await SystemNavigator.pop();
try {
await SystemNavigator.pop(animated: true).timeout(Duration(milliseconds: 150));
} catch (e) {
//
}
exit(0);
}

View File

@@ -304,7 +304,7 @@ class MobileHomeState extends State<MobileHomePage> implements EventListener, Li
});
}
showAlertDialog(String title, String content, Function onClose) {
void showAlertDialog(String title, String content, Function onClose) {
showDialog(
context: context,
barrierDismissible: false,

View File

@@ -127,9 +127,9 @@ class Curl {
if (i + 1 < parts.length) {
data = parts[++i];
}
} else if (!part.startsWith('-') && part.startsWith("http")) {
} else if (url == null && !part.startsWith('-') && part.contains("http")) {
// 解析请求 URL
url = part;
url = part.replaceAll("'", "").replaceAll('"', '');
} else if ("--http2" == part) {
// protocolVersion = "HTTP2";
}