{
    "componentChunkName": "component---src-templates-issues-tsx",
    "path": "/issues/607",
    "result": {"data":{"issuesJson":{"id":"e39f422c-709c-5434-b840-3a87a583f78b","title":"avwo/whistle: 基于 Node 实现的跨平台本地抓包调试工具","number":607,"bodyHTML":"<div align=\"center\" dir=\"auto\">\n<p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\"><img src=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\" width=\"100%\" height=\"3\" data-animated-image=\"\" data-canonical-src=\"https://cdn.jsdelivr.net/gh/eryajf/tu@main/img/image_20240420_214408.gif\" style=\"max-width: 100%; height: auto; max-height: 3px;\"></a><br><br></p>\n<markdown-accessiblity-table><table role=\"table\">\n<thead>\n<tr>\n<th align=\"right\">Repos</th>\n<th align=\"left\"><a href=\"https://github.com/avwo/whistle\">avwo/whistle</a></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"right\"><strong>Views</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/5a40de0791889c15417b6881928ba95470a83f97fc3ac1ee3e186a26657a1c74/68747470733a2f2f76696577732e77686174696c656172656e65642e746f6461792f76696577732f6769746875622f6176776f2f77686973746c652e737667\" alt=\"views\" data-canonical-src=\"https://views.whatilearened.today/views/github/avwo/whistle.svg\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>Stars</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/7b0ac989ac7f67fa2469b71ed220d31c9ad0b51429e9b8ebf9d3662285775032/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6176776f2f77686973746c653f636f6c6f723d663266303864266c6f676f3d556e64657274616c65266c6f676f436f6c6f723d656234363330\" alt=\"stars\" data-canonical-src=\"https://img.shields.io/github/stars/avwo/whistle?color=f2f08d&amp;logo=Undertale&amp;logoColor=eb4630\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>Forks</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/e39c150c2e6fcd90166dd25786e29278ef6f71535138689c7728f439202dcdc3/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f666f726b732f6176776f2f77686973746c653f636f6c6f723d626138366562266c6f676f3d48616e647368616b65266c6f676f436f6c6f723d656136616136\" alt=\"forks\" data-canonical-src=\"https://img.shields.io/github/forks/avwo/whistle?color=ba86eb&amp;logo=Handshake&amp;logoColor=ea6aa6\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>License</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/85114b851cead078b06b9742f3267ab7c5defbddc563426263bfc32ddf8ab8fa/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6176776f2f77686973746c653f6c6f676f3d64617461253341696d616765253246706e672533426261736536342532436956424f5277304b47676f414141414e53556845556741414144414141414177434159414141425841766d48414141414358424957584d41414173544141414c457745416d70775941414144336b6c45515652346e4f335953557a5555426748384a726f57567255474a66456d3773584e63534446784d544c327069347348456778654e526f77586770455742445552522532424e414e4f4b4f4b36366f6f4b4a4742586545475263574163455646475152484677516d483525324630774861655748493944554455354c356b6e6568644f62377a66652532423139636e434a47495243516945596c514237594a4979474c38616f73756c565a36695246516a69474b6b7564576735614c6c704f70704e586e665071773555304459524a6d56786a4367464633424c755a476d416f5655694b4541726d583744375553677351706f72674761336748664b34483663754262435644334771683141352532424c6745253242467749656e514d306a6f446f66714c6f48564e7742796d384370546e416d327a51713073676478624964515a556c416b7150415a3664676a303541446f59526f6f66792532466f5869726f376b3551586a4c6f70677a4b69514e6c4c4461716f4967754577426a7a7150355066446a45394479495879493633464d547751464d43567271774e61763451666f52673538514625324266724d485172454b3844546f434d714e4179574e4866786d54526f4c4f726d5352566747744466714345715a4f4851727a6f34706243557341333431365169364551394b476a6345465267484f724f4b6e5536574162396247455459656b4b7843766a546167394534706a653534446b3551503862624d4859762532464333756541654a6b50304f4778422532424a70426e4172595238455951516e6f4e31414e4661426e5050356c385372736559514c303641646b30464a5938484f5761424d6c6541486a683068506f73497a6c6f3876304125324633345a694f6548726130714b52504d5653493774762532423932747725324676687855654252713456454c674d376642714b354770526d6f514c584e7075625475367a6f4e52706754386e5051627138347764253246494375767978694b4871694e41664933774d367549684271476b4c696977414f734b44714f68743749747239567938536a52424557667941627225324668523142667056514664484a42253246423268683778376a36517077435665655951326b72554235436c636a3641326d3067576a25324244306d4c34397a573563517943484c4e37726a6c6d6d6174457958582532464372547a412532466f51785a6b576c39474a5443566f25324279546a3837253242346769504b6376307149486f344156344430565a727251493334706e70524d36357875652532467a417265453425324654253246536f676c664542794d7369517441546c4c3352414a355948725378365a44665337307337754d486842705225324659423573305057366f455270316236253246667252684b3353444c35546965364f515548516c5133735644752532427a50636b397657453973747225324236496a533967486d5750616861444a25324277434b364e494242587348423948796b587378774470686c436d416476706c6162554a4e6e5a504239342532464e7436784f6538587a4562503257684d335741673147756236744825324233513150673337365239713475716c6e6f36676448476a444f5139306562303141484d3672596975554a314f713472344656756a35765239427a4d3957674e764f7977446869495951467667626366774166774d764863615067425041253246447948476a50624e394138616d6562636477416444354e6633373574787165774e5552656f797677424958594c645170576c6877465771745061435044334173467541535636717171496c62304a766b564331464c39576b4c55556c55574b337a585a4c46432532423125324642726f46746f364f7358497545594a5034447a7a5732594656316f4a614141414141456c46546b5375516d4343\" alt=\"license\" data-canonical-src=\"https://img.shields.io/github/license/avwo/whistle?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD3klEQVR4nO3YSUzUUBgH8JroWVrUGJfEm7sXNcSDFxMTL2pi4sHEgxeNRowXgpEWBDURR%2BNANOKOK66ooKJGBXeEGRcWAcEVFGQRHFwQmH5%2F0wHaeWHI9DUDU5L5knehdOb7zfe%2B19cnCJGIRCQiEYlQB7YJIyGL8aosulVZ6iRFQjiGKkudWg5aLlpOppNXnfPqw5U0DYRJmVxjCgFF3BLuZGmAoVUiKEArmX7D7USgsQporgGa3gHfK4H6cuBbCVD3Gqh1A5%2BLgE%2BFwIenQM0joDofqLoHVNwBym8CpTnAm2zQq0sgdxbIdQZUlAkqPAZ6dgj05ADoYRoofy%2FoXiro7k5QXjLopgzKiQNlLDaqoIguEwBjzqP5PfDjE9DyIXyI63FMTwQFMCVrqwNav4QfoRg58QF%2BfrMHQrEK8DToCMqNAyWNHfxmTRoLOrmSRVgGtDfqCEqZOHQrzo4pbCUsA3416Qi6EQ9KGjcEFRgHOrOKnU6WAb9bGETYekKxCvjTag9E4pje54Dk5QP8bbMHYv%2FC3ueAeJkP0OGxB%2BJpBnArYR8EYQQnoN1ANFaBnPP5l8SrseYQL06Adk0FJY8HOWaBMleAHjh0hPosIzlo8v0A%2F34ZiOeHra0qKRPMVSI7tv%2B92tw%2FvhxUeBRq4VELgM7fBqK5GpRmoQLXNpubTu6zoNRpgT8nPQbq84wd%2FICuvyxiKHqiNAfI3wM6uIhBqGkLiiwAOsKDqOht7Itr9Vy8SjRBEWfyAbr%2FhR1BfpVQFdHJB%2FB2hh7x7j6QpwCVeeYQ2krUB5Clcj6A2m0gWj%2BD0mL49zW5cQyCHLN7rjlmmatEyXX%2FCrTzA%2FoQxZkWl9GJTCVo%2ByTj87%2B4giPKcv0qIHo4AV4D0VZrrQI34pnpRM65xue%2FzAreE4%2FT%2FSoglfEByMsiQtATlL3RAJ5YHrSx6ZDfS70s7uMHhBpR%2FYB5s0PW6oERp1b6%2FfrRhK3SDL5Tie6OQUHQlQ3sVDu%2BzPck9vWE9str%2B6IjS9gHmWPahaDJ%2BwCK6NIBBXsHB9HykXsxwDphlCmAdvplabUJNnZPB94%2FNt6xOe8XzEbP2WhM3WAg1Gub6tH%2B3Q1Pg376R9q4uqlno6gdHGjDOQ90eb01AHM6rYiuUJ1Oq4r4FVuj5vR9BzM9WgNvOywDhiIYQFvgbcfwAfwMvHcaPgBPA%2FDyHGjPbN9A8amebcdwAdD5Nf375txqewNUReoyvwBIXYLdQpWlhwFWqtPaCPD3AsFuASV6qqqIlb0JvkVC1FL9WkLUUlUWK3zXZLFC%2B1%2FBroFto6OsXIuEYJP4DzzW2YFV1oJaAAAAAElFTkSuQmCC\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>UpdatedAt</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/388a14c7b3bfd696df4fb6f1d2a35cbaab66e4de5c88a8f6ae3b653efdb5b321/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f6176776f2f77686973746c653f646973706c61795f74696d657374616d703d636f6d6d6974746572266c6f676f3d64617461253341696d616765253246706e672533426261736536342532436956424f5277304b47676f414141414e5355684555674141414234414141416543415941414141374d4b3669414141414358424957584d41414173544141414c457745416d7077594141414648556c45515652346e4c5658375539615678776d3236646c582532466468627825324232253246516e626b7655627264554151674a4a496655444e574454546d4f76314651554661504a346b7573725630314a7431734e70637453327533626f745a746d786439744a5346536f714b71494635625944464c436f76436c656673747a4a387758524c445a4c7a6e6b634f343535376e3364332532466e655a3472454f515a74315771462532423858467234253242664f4c4565326a6f59307a776638546f795a50766a45676b4c592532426b306d6d72584f36644b696e787a476b30666a5430782532425279723055716e6359637a4d317263347451253242497270324c4758646f344e4334567657715453373277716c632532427231334f527269364b6458646e624f484c6c776c7a4a70524b6e3657342532424b36706f4f434e6e494166486a253246253242776168495a4234764b6e715a6630714a704e49716c2532467638545530634e6c3572627963337730516e54703379324c54614a374d314e617844723266526e315370504736476961323174664533345463614f617931694d55564f5146624659714957536f31573854694156616e43306576584f4542375770313448466232327a453566714c4f433545524c515769644e614e49347545636339693768634a6c644868324e57725135674464624f6c7061756d49754c62326174415144506e7a3062384e6257636d785656524a33486d7870536377777a4f4a6d4b44524765384c6c435a444c4739673754496e5631516c376462586256316533675430574b697243466f6d6b5079767758466c5a474a4f6a563625324253743634757564445a4f55354555636f782532464d455144567674364d62634e3237593341797a687633737061557242365a3971724a534f3139657a6a387032704c426b4a792532426343484a7857493567573574636652527a31645531394766476b6f7539505a4f34736d52396a4746777065783444793362766e6d4b79706f74625531335669646a71595a68726a343972764d457425324625324659714c7a396430304e6a57253246637a67796f394f35317a7336614e6c6f354644747530445a675146686c47584a30644241446f4e6864367576703657686f617967374e394c564748386d443462253246486e667455516f4e4734764c51306769784d716c5725324234714f6a744e48446733723166365969525347785279375576714c62395534716b716e78504f4e7661356c447048723125324279794b524e4b57425a793565644d554842326d3572792532422532424551772532427a6766347a6f39253246306f634e3357527a4c4277344a2532424a7950574372716d4967475974554f735744346f785a46516f50556a4770564871493425324661666b51504336665a5165654d31253242764c7549516e6a754257514444437363726d485039656f4e5041744271664f6e5875614b25324268364a45624772732532427076764d6d78654962683836336162565065597953456f39464a48704e4d464a59253242503563575a6b6667374f3174537759436553514c54593345385130392532464256504a556c78516a7368543142736343593032723955445542667643484236367063665041336c794165336e6772332532463437584467614a7a736c7937787741364e5a746c555550437541487161536a5549502532427375653842525741432532464e6651374a5a505a35397330476a3756747049537a34685125324243706658474d4b685a63764c70554b7866574d386f68766637702532464f446a4842666356463849736b383267314648796b63564645253242555a414158343761452532464d6c34504f3530506e75683025324678346e6d637957507364774468427836436d6b4c562532466746446a594b784f4a4f4674623077517949684c39527943774b33414f664947703159464542686e4d4a634c525745624b644b516f55366e63545a6b494544696341792532463831645675454d3552775066657934784f7830496b25324649324e6e466b692532425761664f6f464959466367595a43797864376543556a626334416d46363566742532466b4d686b336f25324235686337734d4a79716a4a45477659466151464972375930775077384246415925324236253242766d6b3377367a7a5275444d6d5a5652736668385274413075455453443775434254364459514e36697665553066706b594c6a453671725672744f78654e4b553954484c5a4a396b4255324a427342685635416976422532466f4b61514e4b675043427744596149665a4334616454684f71463457454e56694c4a77566f586f62664c424b56773637414f6154734c6336355461564b32317651344c613939654b6359673576627873624f627a5451394e37554b4467554f3177446a6944494942736868357a746733396e514d4c535a4248344f7a424f55444551586d323036643366634c67737762585141345068634b336e6873775531427a3877765130395248472532466f597933656a6677424e6d746f59714c4130586741414141424a52553545726b4a676767253344253344266c6162656c3d557064617465644174\" alt=\"last-commit\" data-canonical-src=\"https://img.shields.io/github/last-commit/avwo/whistle?display_timestamp=committer&amp;logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHUlEQVR4nLVX7U9aVxwm26dlX%2Fdhbx%2B2%2FQnbkvUbrdUAQgJJIfUDNWDTTmOv1FQUFaPJ4kusrV01Jt1sNpctS2u3botZtmxd9tJSFSoqKqIF5bYDFLCovClefstzJ8wXRLDZLznkcO4557n3d3%2FneZ4rEOQZt1WqF%2B8XFr4%2BfOLEe2joY0zwf8ToyZPvjEgkLY%2Bk0mmrXO6dKinxzGk0fjT0x%2BRyr0UqncYczM1rc4tQ%2BIrp2LGXdo4NC4VvWqTS72wqlc%2Br13ORri6KdXdnbOHLlwlzJpRKn6W4%2BK6poOCNnIAfHj%2F%2BwahIZB4vKnqZf0qJpNIql%2Fv8TU0cNl5rbyc3w0QnTp3y2LTaJ7M1NaxDr2fRn1SpPG6Gia21tfE34TcaOay1iMUVOQFbFYqIWSo1W8TiAVanC0evXOEB7Wp14HFb22zE5fqLOC5ERLQWidNaNI4uEcc9i7hcJldHh2NWrQ5gDdbOlpaumIuLb2atAQDPnz0b8NbWcmxVVRJ3HmxpScwwzOJmKDRGe8LlCZDLG9g7TInV1Ql7dbXbV1e3gT0WKirCFomkPyvwXFlZGJOjV6%2BSt64uudDZOU5EUcox%2FMEQDVvt6MbcN27Y3Ayzhv3spaUrB6Z9qrJSO19ezj8p2pLBkJy%2BcCHJxWI5gW5tcfRRz1dU19GfGkou9PZO4smR9jGFwpex4Dy3bvnmKypotbU13VidjqYZhrj49rvMEt%2F%2FYqLz9d00NjW%2Fczgyo9O51zs6aNlo5FDtu0DZgQFhlGXJ0dBADoNhd6uvp6Whoayg7N9LVGH8mD4b%2FHnftUQoNG4vLQ0gixMqlW%2B4qOjtNHDg3r1f6YiRSGxRy7UvqLb9U4qkqnxPONva5lDpHr1%2ByyKRNKWBZy5edMUHB2m5ry%2B%2BEQw%2Bzgf4zo9%2F0ocN3WRzLBw4J%2BJyPWCrqmIgGYtUOsWD4oxZFQoPUjGpVHqI4%2FafkQPC6fZQeeM1%2BvLuIQnjuBWQDDCscrmHP9eoNPAtBqfOnXuaK%2Bh6JEbGrs%2BpvvMmxeIbh863abVPeYySEo9FJHpNMFJY%2BP5cWZkfg7O1tSwYCeSQLTY3E8Q09%2FBVPJUlxQjshT1BscCY02r9UDUBfvCHB66pcfPA3lyAe3ngr3%2F47XDgaJzsly7xwA6NZtlUUPCuAHqaSjUIP%2Bsue8BRWAC%2FNfQ7JZPZ59s0Gj7VtpISz4hQ%2BCpfXGMKhZcvLpUKxfWM8ohvf7p%2FODjHBfcVF8Isk82g1FHykcVFE%2BUZAAX47aE%2FMl4PO50Pnuh0%2Fx4nmcyWPsdwDhBx6CmkLV%2FgFDjYKxOJOFtb0wQyIhL9RyCwK3AOfIGp1YFEBhnMJcLRWEbKdKQoU6ncTZkIEDicAy%2F81dVuEM5RwPfey4xOx0Ik%2FI2NnFki%2BWafOoFIYFcgYZCyxd7eCUjbc4AmF65ft%2FkMhk3o%2B5hc7sMJyqjJEGvYFaQFIr7Y0wPw8BFAY%2B6%2Bvmk3w6zzRuDMmZVRsfh8RtA0uETSD7uCBT6DYQN6iveU0fpkYLjE6qrVrtOxeNKU9THLZJ9kBU2JBsBhV5AivB%2FoKaQNKgPCBwDYaIfZC4adThOqF4WENViLJwVoXobfLBKVw67AOaTsLc65TaVK21vQ4La99eKcYg5vbxsbObzTQ9N7UKDgUO1wDjiDIIBshh5ztg39nQMLSZBH4OzBOUDEQXm206d3fcLgswbXQA4PhcK3nhswU1Bz8wvQ09RHG%2FoYy3ejfwBNmtoYqLA0XgAAAABJRU5ErkJggg%3D%3D&amp;label=UpdatedAt\" style=\"max-width: 100%;\"></a></td>\n</tr>\n<tr>\n<td align=\"right\"><strong>CreatedAt</strong></td>\n<td align=\"left\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/1ea76e4ebf1a47c56414e5d59b239c5de670b37fcb22ae4493bfbaf34a339dce/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f637265617465642d61742f6176776f2f77686973746c653f6c6f676f3d64617461253341696d616765253246706e672533426261736536342532436956424f5277304b47676f414141414e5355684555674141414234414141416543415941414141374d4b3669414141414358424957584d41414173544141414c457745416d7077594141414648556c45515652346e4c5658375539615678776d3236646c582532466468627825324232253246516e626b7655627264554151674a4a496655444e574454546d4f76314651554661504a346b7573725630314a7431734e70637453327533626f745a746d786439744a5346536f714b71494635625944464c436f76436c656673747a4a387758524c445a4c7a6e6b634f343535376e3364332532466e655a3472454f515a74315771462532423858467234253242664f4c4565326a6f59307a776638546f795a50766a45676b4c592532426b306d6d72584f36644b696e787a476b30666a5430782532425279723055716e6359637a4d317263347451253242497270324c4758646f344e4334567657715453373277716c632532427231334f527269364b6458646e624f484c6c776c7a4a70524b6e3657342532424b36706f4f434e6e494166486a253246253242776168495a4234764b6e715a6630714a704e49716c2532467638545530634e6c3572627963337730516e54703379324c54614a374d314e617844723266526e315370504736476961323174664533345463614f617931694d55564f5146624659714957536f31573854694156616e43306576584f4542375770313448466232327a453566714c4f433545524c515769644e614e49347545636339693768634a6c644868324e57725135674464624f6c7061756d49754c62326174415144506e7a3062384e6257636d785656524a33486d7870536377777a4f4a6d4b44524765384c6c435a444c4739673754496e5631516c376462586256316533675430574b697243466f6d6b5079767758466c5a474a4f6a563625324253743634757564445a4f55354555636f782532464d455144567674364d62634e3237593341797a687633737061557242365a3971724a534f3139657a6a387032704c426b4a792532426343484a7857493567573574636652527a31645531394766476b6f7539505a4f34736d52396a4746777065783444793362766e6d4b79706f74625531335669646a71595a68726a343972764d457425324625324659714c7a396430304e6a57253246637a67796f394f35317a7336614e6c6f354644747530445a675146686c47584a30644241446f4e6864367576703657686f617967374e394c564748386d443462253246486e667455516f4e4734764c51306769784d716c5725324234714f6a744e48446733723166365969525347785279375576714c62395534716b716e78504f4e7661356c447048723125324279794b524e4b57425a793565644d554842326d3572792532422532424551772532427a6766347a6f39253246306f634e3357527a4c4277344a2532424a7950574372716d4967475974554f735744346f785a46516f50556a4770564871493425324661666b51504336665a5165654d31253242764c7549516e6a754257514444437363726d485039656f4e5041744271664f6e5875614b25324268364a45624772732532427076764d6d78654962683836336162565065597953456f39464a48704e4d464a59253242503563575a6b6667374f3174537759436553514c54593345385130392532464256504a556c78516a7368543142736343593032723955445542667643484236367063665041336c794165336e6772332532463437584467614a7a736c7937787741364e5a746c555550437541487161536a5549502532427375653842525741432532464e6651374a5a505a35397330476a3756747049537a34685125324243706658474d4b685a63764c70554b7866574d386f68766637702532464f446a4842666356463849736b383267314648796b63564645253242555a414158343761452532464d6c34504f3530506e75683025324678346e6d637957507364774468427836436d6b4c562532466746446a594b784f4a4f4674623077517949684c39527943774b33414f664947703159464542686e4d4a634c525745624b644b516f55366e63545a6b494544696341792532463831645675454d3552775066657934784f7830496b25324649324e6e466b692532425761664f6f464959466367595a43797864376543556a626334416d46363566742532466b4d686b336f25324235686337734d4a79716a4a45477659466151464972375930775077384246415925324236253242766d6b3377367a7a5275444d6d5a5652736668385274413075455453443775434254364459514e36697665553066706b594c6a453671725672744f78654e4b553954484c5a4a396b4255324a427342685635416976422532466f4b61514e4b675043427744596149665a4334616454684f71463457454e56694c4a77566f586f62664c424b56773637414f6154734c6336355461564b32317651344c613939654b6359673576627873624f627a5451394e37554b4467554f3177446a6944494942736868357a746733396e514d4c535a4248344f7a424f55444551586d323036643366634c67737762585141345068634b336e6873775531427a3877765130395248472532466f597933656a6677424e6d746f59714c4130586741414141424a52553545726b4a676767253344253344266c6162656c3d437265617465644174\" alt=\"create-at\" data-canonical-src=\"https://img.shields.io/github/created-at/avwo/whistle?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHUlEQVR4nLVX7U9aVxwm26dlX%2Fdhbx%2B2%2FQnbkvUbrdUAQgJJIfUDNWDTTmOv1FQUFaPJ4kusrV01Jt1sNpctS2u3botZtmxd9tJSFSoqKqIF5bYDFLCovClefstzJ8wXRLDZLznkcO4557n3d3%2FneZ4rEOQZt1WqF%2B8XFr4%2BfOLEe2joY0zwf8ToyZPvjEgkLY%2Bk0mmrXO6dKinxzGk0fjT0x%2BRyr0UqncYczM1rc4tQ%2BIrp2LGXdo4NC4VvWqTS72wqlc%2Br13ORri6KdXdnbOHLlwlzJpRKn6W4%2BK6poOCNnIAfHj%2F%2BwahIZB4vKnqZf0qJpNIql%2Fv8TU0cNl5rbyc3w0QnTp3y2LTaJ7M1NaxDr2fRn1SpPG6Gia21tfE34TcaOay1iMUVOQFbFYqIWSo1W8TiAVanC0evXOEB7Wp14HFb22zE5fqLOC5ERLQWidNaNI4uEcc9i7hcJldHh2NWrQ5gDdbOlpaumIuLb2atAQDPnz0b8NbWcmxVVRJ3HmxpScwwzOJmKDRGe8LlCZDLG9g7TInV1Ql7dbXbV1e3gT0WKirCFomkPyvwXFlZGJOjV6%2BSt64uudDZOU5EUcox%2FMEQDVvt6MbcN27Y3Ayzhv3spaUrB6Z9qrJSO19ezj8p2pLBkJy%2BcCHJxWI5gW5tcfRRz1dU19GfGkou9PZO4smR9jGFwpex4Dy3bvnmKypotbU13VidjqYZhrj49rvMEt%2F%2FYqLz9d00NjW%2Fczgyo9O51zs6aNlo5FDtu0DZgQFhlGXJ0dBADoNhd6uvp6Whoayg7N9LVGH8mD4b%2FHnftUQoNG4vLQ0gixMqlW%2B4qOjtNHDg3r1f6YiRSGxRy7UvqLb9U4qkqnxPONva5lDpHr1%2ByyKRNKWBZy5edMUHB2m5ry%2B%2BEQw%2Bzgf4zo9%2F0ocN3WRzLBw4J%2BJyPWCrqmIgGYtUOsWD4oxZFQoPUjGpVHqI4%2FafkQPC6fZQeeM1%2BvLuIQnjuBWQDDCscrmHP9eoNPAtBqfOnXuaK%2Bh6JEbGrs%2BpvvMmxeIbh863abVPeYySEo9FJHpNMFJY%2BP5cWZkfg7O1tSwYCeSQLTY3E8Q09%2FBVPJUlxQjshT1BscCY02r9UDUBfvCHB66pcfPA3lyAe3ngr3%2F47XDgaJzsly7xwA6NZtlUUPCuAHqaSjUIP%2Bsue8BRWAC%2FNfQ7JZPZ59s0Gj7VtpISz4hQ%2BCpfXGMKhZcvLpUKxfWM8ohvf7p%2FODjHBfcVF8Isk82g1FHykcVFE%2BUZAAX47aE%2FMl4PO50Pnuh0%2Fx4nmcyWPsdwDhBx6CmkLV%2FgFDjYKxOJOFtb0wQyIhL9RyCwK3AOfIGp1YFEBhnMJcLRWEbKdKQoU6ncTZkIEDicAy%2F81dVuEM5RwPfey4xOx0Ik%2FI2NnFki%2BWafOoFIYFcgYZCyxd7eCUjbc4AmF65ft%2FkMhk3o%2B5hc7sMJyqjJEGvYFaQFIr7Y0wPw8BFAY%2B6%2Bvmk3w6zzRuDMmZVRsfh8RtA0uETSD7uCBT6DYQN6iveU0fpkYLjE6qrVrtOxeNKU9THLZJ9kBU2JBsBhV5AivB%2FoKaQNKgPCBwDYaIfZC4adThOqF4WENViLJwVoXobfLBKVw67AOaTsLc65TaVK21vQ4La99eKcYg5vbxsbObzTQ9N7UKDgUO1wDjiDIIBshh5ztg39nQMLSZBH4OzBOUDEQXm206d3fcLgswbXQA4PhcK3nhswU1Bz8wvQ09RHG%2FoYy3ejfwBNmtoYqLA0XgAAAABJRU5ErkJggg%3D%3D&amp;label=CreatedAt\" style=\"max-width: 100%;\"></a></td>\n</tr>\n</tbody>\n</table></markdown-accessiblity-table>\n<a href=\"https://github.com/opsre/awesome-ops\">\n</a><p dir=\"auto\"><a href=\"https://github.com/opsre/awesome-ops\"><img src=\"https://camo.githubusercontent.com/b964a36ea4078c39f603d46a29436371c7541a2f26e0228d7b21b9d9805b43d3/68747470733a2f2f736f6369616c6966792e6769742e63692f6f707372652f617765736f6d652d6f70732f696d6167653f6465736372697074696f6e3d3126666f6e743d42697474657226666f726b733d31266973737565733d31266c616e67756167653d31266c6f676f3d6874747073253341253246253246617661746172732e67697468756275736572636f6e74656e742e636f6d25324675253246313838353638303230266e616d653d31266f776e65723d31267061747465726e3d436972637569742b426f6172642670756c6c733d31267374617267617a6572733d31267468656d653d4c69676874\" alt=\"\" data-canonical-src=\"https://socialify.git.ci/opsre/awesome-ops/image?description=1&amp;font=Bitter&amp;forks=1&amp;issues=1&amp;language=1&amp;logo=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F188568020&amp;name=1&amp;owner=1&amp;pattern=Circuit+Board&amp;pulls=1&amp;stargazers=1&amp;theme=Light\" style=\"max-width: 100%;\"></a></p>\n<a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\"><img src=\"https://camo.githubusercontent.com/a15b413168923d02e21292705ceaf86b92675f98e250c5c896a02ba7504a6eae/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f657279616a662f7475406d61696e2f696d672f696d6167655f32303234303432305f3231343430382e676966\" width=\"100%\" height=\"3\" data-animated-image=\"\" data-canonical-src=\"https://cdn.jsdelivr.net/gh/eryajf/tu@main/img/image_20240420_214408.gif\" style=\"max-width: 100%; height: auto; max-height: 3px;\"></a>\n</div>\n<p align=\"center\" dir=\"auto\">\n  <a href=\"https://avwo.github.io/whistle/\" rel=\"nofollow\">\n    <img alt=\"whistle logo\" src=\"https://user-images.githubusercontent.com/11450939/168828068-99e38862-d5fc-42bc-b5ab-6262b2ca27d6.png\" style=\"max-width: 100%;\">\n  </a>\n</p>\n<h1 dir=\"auto\">whistle</h1>\n<p dir=\"auto\"><a href=\"https://npmjs.org/package/whistle\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/edd52ca1d8dfe432f3f2b5cf8c2526e0eef8e0b486fab4140012a23cf69d8333/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f77686973746c652e7376673f7374796c653d666c61742d737175617265\" alt=\"NPM version\" data-canonical-src=\"https://img.shields.io/npm/v/whistle.svg?style=flat-square\" style=\"max-width: 100%;\"></a><br>\n<a href=\"http://nodejs.org/download/\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/8e3409b168a2399d8ded21d65ec61dd5daf6636d9ccc090d2aa0cfb8038fd628/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6e6f64652e6a732d2533453d5f382d677265656e2e7376673f7374796c653d666c61742d737175617265\" alt=\"node version\" data-canonical-src=\"https://img.shields.io/badge/node.js-%3E=_8-green.svg?style=flat-square\" style=\"max-width: 100%;\"></a><br>\n<a href=\"https://codecov.io/gh/avwo/whistle\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/987fa41f783797148a68c730ed08b1004578aa31e8f2e9a3d8d2fc63fa625757/68747470733a2f2f636f6465636f762e696f2f67682f6176776f2f77686973746c652f6272616e63682f6d61737465722f67726170682f62616467652e7376673f7374796c653d666c61742d737175617265\" alt=\"Test coverage\" data-canonical-src=\"https://codecov.io/gh/avwo/whistle/branch/master/graph/badge.svg?style=flat-square\" style=\"max-width: 100%;\"></a><br>\n<a href=\"https://npmjs.org/package/whistle\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/0d0988d3aeff30035e114053776e2192e8f316ce50508e699a9415f7f03cc091/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f646d2f77686973746c652e7376673f7374796c653d666c61742d737175617265\" alt=\"npm download\" data-canonical-src=\"https://img.shields.io/npm/dm/whistle.svg?style=flat-square\" style=\"max-width: 100%;\"></a><br>\n<a href=\"https://www.npmjs.com/package/whistle\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/381a9d5125c859b88d50d6bce60ccf5469781575c8b3ee9921262ee9875793ef/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f64742f77686973746c652e7376673f7374796c653d666c61742d737175617265\" alt=\"NPM count\" data-canonical-src=\"https://img.shields.io/npm/dt/whistle.svg?style=flat-square\" style=\"max-width: 100%;\"></a><br>\n<a href=\"https://www.npmjs.com/package/whistle\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/35155e3f18edf7e0fa38087c48314c74995d090931e700022d3e0572f3fabeb3/68747470733a2f2f696d672e736869656c64732e696f2f6175722f6c6963656e73652f77686973746c653f7374796c653d666c61742d737175617265\" alt=\"License\" data-canonical-src=\"https://img.shields.io/aur/license/whistle?style=flat-square\" style=\"max-width: 100%;\"></a></p>\n<p dir=\"auto\">中文 · <a href=\"./README-en_US.md\">English</a></p>\n<p dir=\"auto\">Whistle 是一个基于 Node.js 开发的功能强大、操作简单的跨平台抓包调试工具。它支持多种代理模式（如 HTTP、HTTPS、Socks、反向代理等），可用于抓包分析或通过配置规则修改 HTTP、HTTPS、HTTP/2、WebSocket、TCP 请求。Whistle 还内置了 Weinre、Log、Composer 等工具，支持查看远程页面的 DOM 结构、调试 console 输出、重放或编辑请求等。此外，Whistle 支持插件扩展，也可作为 NPM 包被其他项目引用。</p>\n<h1 dir=\"auto\">安装</h1>\n<p dir=\"auto\"><strong>Windows PC 或 Mac PC 推荐使用客户端：<a href=\"https://github.com/avwo/whistle-client\">https://github.com/avwo/whistle-client</a>。</strong></p>\n<blockquote>\n<p dir=\"auto\">如果采用 Whistle 客户端可以跳过该安装步骤</p>\n</blockquote>\n<p dir=\"auto\">Linux PC、服务器等其它系统可以用命令行版本，需严格按如下 4 个步骤安装：</p>\n<ol dir=\"auto\">\n<li>安装 Whistle</li>\n<li>启动 Whistle</li>\n<li>安装根证书</li>\n<li>设置代理</li>\n</ol>\n<h3 dir=\"auto\">安装 Whistle</h3>\n<p dir=\"auto\">根据实际情况选择以下一种安装方式即可：</p>\n<ol dir=\"auto\">\n<li>\n<p dir=\"auto\">通过 npm 安装（需要先安装 Node.JS：<a href=\"https://nodejs.org/\" rel=\"nofollow\">https://nodejs.org/</a> ）：</p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"npm i -g whistle\"><pre class=\"notranslate\">npm i -g whistle</pre></div>\n</li>\n<li>\n<p dir=\"auto\">通过 brew 安装（需要先安装 brew：<a href=\"https://brew.sh/\" rel=\"nofollow\">https://brew.sh/</a> ）：</p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"brew install whistle\"><pre class=\"notranslate\">brew install whistle</pre></div>\n</li>\n</ol>\n<h3 dir=\"auto\">启动 Whistle</h3>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"w2 start\"><pre class=\"notranslate\">w2 start</pre></div>\n<blockquote>\n<p dir=\"auto\">Whistle 默认启动 HTTP 代理（IP：<code class=\"notranslate\">127.0.0.1</code>，端口： <code class=\"notranslate\">8899</code>），可以通过 <code class=\"notranslate\">w2 start -p 8888</code> 修改端口，如果已启动需要通过 <code class=\"notranslate\">w2 restart -p 8888</code> 重启修改端口</p>\n</blockquote>\n<p dir=\"auto\">完整命令行功能参见完整文档：<a href=\"https://wproxy.org/whistle/options.html\" rel=\"nofollow\">https://wproxy.org/whistle/options.html</a></p>\n<h3 dir=\"auto\">安装根证书</h3>\n<p dir=\"auto\">启动 Whistle 后可以通过下面的命令安装根证书：</p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"w2 ca --enable-https\"><pre class=\"notranslate\">w2 ca --enable-https</pre></div>\n<details>\n  <summary>Windows 需要最后点击 “是(Y)” 确认</summary>\n  <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://user-images.githubusercontent.com/11450939/168846905-384e0540-e02f-46de-81d7-e395a496f032.jpeg\"><img alt=\"点击 是(Y)\" width=\"420\" src=\"https://user-images.githubusercontent.com/11450939/168846905-384e0540-e02f-46de-81d7-e395a496f032.jpeg\" style=\"max-width: 100%;\"></a>\n</details>\n<details>\n  <summary>Mac 需要输入开机密码或指纹验证</summary>\n  <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://user-images.githubusercontent.com/11450939/176977027-4a7b06a0-64f6-4580-b983-312515e9cd4e.png\"><img alt=\"输入开机密码\" width=\"330\" src=\"https://user-images.githubusercontent.com/11450939/176977027-4a7b06a0-64f6-4580-b983-312515e9cd4e.png\" style=\"max-width: 100%;\"></a>\n  <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://user-images.githubusercontent.com/11450939/168847123-e66845d0-6002-4f24-874f-b6943f7f376b.png\"><img alt=\"输入指纹\" width=\"330\" src=\"https://user-images.githubusercontent.com/11450939/168847123-e66845d0-6002-4f24-874f-b6943f7f376b.png\" style=\"max-width: 100%;\"></a>\n</details>\n<p dir=\"auto\">手机等其它端如何安装根证书参见完整文档：<a href=\"https://wproxy.org/whistle/webui/https.html\" rel=\"nofollow\">https://wproxy.org/whistle/webui/https.html</a></p>\n<h3 dir=\"auto\">设置代理</h3>\n<p dir=\"auto\"><strong>Windows PC 或 Mac PC 有以下四种方式，根据实际情况选择其中一种即可：</strong></p>\n<ol dir=\"auto\">\n<li>\n<p dir=\"auto\"><strong>【推荐】</strong> 通过安装 Chrome 插件 SwitchyOmega 设置代理：<a href=\"https://chromewebstore.google.com/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif\" rel=\"nofollow\">https://chromewebstore.google.com/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif</a></p>\n<blockquote>\n<p dir=\"auto\">Chrome 应用商店需要翻墙，如果无法访问请手动安装：<a href=\"https://proxy-switchyomega.com/download/\" rel=\"nofollow\">https://proxy-switchyomega.com/download/</a></p>\n</blockquote>\n<details>\n  <summary>SwitchyOmega 设置方法示例图</summary>\n\t<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://private-user-images.githubusercontent.com/11450939/398358787-24016b7c-8f2a-45a3-9dc8-5ef3ddf46233.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS8zOTgzNTg3ODctMjQwMTZiN2MtOGYyYS00NWEzLTlkYzgtNWVmM2RkZjQ2MjMzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZhNzY3MTU5ZTI3OWU3ZmExOGEzYWVmZWZlODA5NGNkZTY1MDE5Yzk2ODcxZTZlMzViYWZjYzU0ODg0ZGIyNGImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.BDCR3mM3Q96ulQ0fdAN5-cfjm5qv88wBdnJPA3SVtBw\"><img width=\"620\" alt=\"image\" src=\"https://private-user-images.githubusercontent.com/11450939/398358787-24016b7c-8f2a-45a3-9dc8-5ef3ddf46233.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS8zOTgzNTg3ODctMjQwMTZiN2MtOGYyYS00NWEzLTlkYzgtNWVmM2RkZjQ2MjMzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZhNzY3MTU5ZTI3OWU3ZmExOGEzYWVmZWZlODA5NGNkZTY1MDE5Yzk2ODcxZTZlMzViYWZjYzU0ODg0ZGIyNGImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.BDCR3mM3Q96ulQ0fdAN5-cfjm5qv88wBdnJPA3SVtBw\" style=\"max-width: 100%;\"></a><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://private-user-images.githubusercontent.com/11450939/399046861-43afd3cd-5c17-4d6a-82d0-20a7ef2e0d99.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS8zOTkwNDY4NjEtNDNhZmQzY2QtNWMxNy00ZDZhLTgyZDAtMjBhN2VmMmUwZDk5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM5MDIzMmVhMzQyNGY1M2QyNThhMTY2MzhjYTY3YTk5MmNkNjk5MzY3ZjdkYWYzYjYyMWY2NDdiYWEzNDcyMjYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.qpVJMs2pKPQcpfI2TnRNLwDaAdmUp1AK5HTJQZR0JMw\"><img width=\"180\" alt=\"image\" src=\"https://private-user-images.githubusercontent.com/11450939/399046861-43afd3cd-5c17-4d6a-82d0-20a7ef2e0d99.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS8zOTkwNDY4NjEtNDNhZmQzY2QtNWMxNy00ZDZhLTgyZDAtMjBhN2VmMmUwZDk5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM5MDIzMmVhMzQyNGY1M2QyNThhMTY2MzhjYTY3YTk5MmNkNjk5MzY3ZjdkYWYzYjYyMWY2NDdiYWEzNDcyMjYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.qpVJMs2pKPQcpfI2TnRNLwDaAdmUp1AK5HTJQZR0JMw\" style=\"max-width: 100%;\"></a>\n</details>\n</li>\n<li>\n<p dir=\"auto\">通过命令行设置系统代理：</p>\n<div class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"w2 proxy\"><pre lang=\".\" class=\"notranslate\"><code class=\"notranslate\">w2 proxy\n</code></pre></div>\n<blockquote>\n<p dir=\"auto\">也可以指定IP（默认<code class=\"notranslate\">127.0.0.1</code>）和端口： <code class=\"notranslate\">w2 proxy \"10.x.x.x:8888\"</code> ，关闭系统设置代理用 <code class=\"notranslate\">w2 proxy 0</code></p>\n</blockquote>\n</li>\n<li>\n<p dir=\"auto\">直接在客户端上设置代理，如 FireFox、微信开发者工具等内置了设置代理功能</p>\n <details>\n   <summary>FireFox 设置代理示例图</summary>\n     <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://private-user-images.githubusercontent.com/11450939/400601808-98c1ec5d-4955-4e23-a49a-c1015b128d9d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS80MDA2MDE4MDgtOThjMWVjNWQtNDk1NS00ZTIzLWE0OWEtYzEwMTViMTI4ZDlkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWMzODEzZDA0NTIyNDBjNDIyNWJmMDBiNGMzNDU0ZGYyYjY0MmFiMTBmYjM4MWQ1NTkwZjc0YzQwNzA0ZWU5ODkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.eHaMkibEWwVZ-69zE6nsd4kZiaHAJ8pZ_yDcdoTC11g\"><img width=\"1100\" alt=\"image\" src=\"https://private-user-images.githubusercontent.com/11450939/400601808-98c1ec5d-4955-4e23-a49a-c1015b128d9d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS80MDA2MDE4MDgtOThjMWVjNWQtNDk1NS00ZTIzLWE0OWEtYzEwMTViMTI4ZDlkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWMzODEzZDA0NTIyNDBjNDIyNWJmMDBiNGMzNDU0ZGYyYjY0MmFiMTBmYjM4MWQ1NTkwZjc0YzQwNzA0ZWU5ODkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.eHaMkibEWwVZ-69zE6nsd4kZiaHAJ8pZ_yDcdoTC11g\" style=\"max-width: 100%;\"></a> \n </details>\n</li>\n<li>\n<p dir=\"auto\">通过 Proxifier 设置代理（针对无法设置代理且不使用系统代理的客户端）：<a href=\"https://www.proxifier.com/docs/win-v4/http-proxy.html\" rel=\"nofollow\">https://www.proxifier.com/docs/win-v4/http-proxy.html</a></p>\n</li>\n</ol>\n<p dir=\"auto\"><strong>Linux 设置路径: Settings &gt; Network &gt; VPN &gt; Network Proxy &gt; Manual</strong></p>\n  <details>\n    <summary>Linux 设置代理示例图</summary>\n      <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://private-user-images.githubusercontent.com/11450939/400602405-e9441d32-c818-4446-8be6-0fa3df3aed86.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS80MDA2MDI0MDUtZTk0NDFkMzItYzgxOC00NDQ2LThiZTYtMGZhM2RmM2FlZDg2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJkMjljNmFjOTAzZWVhZDJiMTUyMGE0MWRhNzllZWM3NDliOWQwM2ZlNzcwZGZiYTdmZmE3ZmQ1N2JkOTcxZjEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.IV7tdgvNjEV6gttM_WXfifevlfI6w8RRxKNFZoQqgV8\"><img width=\"1000\" alt=\"image\" src=\"https://private-user-images.githubusercontent.com/11450939/400602405-e9441d32-c818-4446-8be6-0fa3df3aed86.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS80MDA2MDI0MDUtZTk0NDFkMzItYzgxOC00NDQ2LThiZTYtMGZhM2RmM2FlZDg2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJkMjljNmFjOTAzZWVhZDJiMTUyMGE0MWRhNzllZWM3NDliOWQwM2ZlNzcwZGZiYTdmZmE3ZmQ1N2JkOTcxZjEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.IV7tdgvNjEV6gttM_WXfifevlfI6w8RRxKNFZoQqgV8\" style=\"max-width: 100%;\"></a>\n  </details>\n<p dir=\"auto\"><strong>手机等移动端设备需要在 <code class=\"notranslate\">设置</code> 中配置当前 <code class=\"notranslate\">Wi-Fi</code> 的代理，以 iOS 为例：</strong></p>\n  <details>\n    <summary>iOS 设置代理示例图</summary>\n      <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://private-user-images.githubusercontent.com/11450939/400600576-e97dc311-2ace-4287-b6b0-0247b13974a9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS80MDA2MDA1NzYtZTk3ZGMzMTEtMmFjZS00Mjg3LWI2YjAtMDI0N2IxMzk3NGE5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ1MDk5M2ViZWU3N2MwZmZhZGUzM2VmZGNkNzRhN2M5ZDE0YWMzNTg5N2ZjZTEwODJjODRjYTcwMjY2MWU0MTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.RRtoltaMQbnqggUdcjMtEwV9wrE9oekaEfSzJWXSDq0\"><img width=\"1000\" alt=\"image\" src=\"https://private-user-images.githubusercontent.com/11450939/400600576-e97dc311-2ace-4287-b6b0-0247b13974a9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS80MDA2MDA1NzYtZTk3ZGMzMTEtMmFjZS00Mjg3LWI2YjAtMDI0N2IxMzk3NGE5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ1MDk5M2ViZWU3N2MwZmZhZGUzM2VmZGNkNzRhN2M5ZDE0YWMzNTg5N2ZjZTEwODJjODRjYTcwMjY2MWU0MTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.RRtoltaMQbnqggUdcjMtEwV9wrE9oekaEfSzJWXSDq0\" style=\"max-width: 100%;\"></a>\n  </details>\n<h1 dir=\"auto\">使用</h1>\n<p dir=\"auto\">按上面步骤安装好 Whistle，在 Chrome 浏览器上打开链接 <a href=\"http://local.whistlejs.com\" rel=\"nofollow\">http://local.whistlejs.com</a> ，即可看到如下操作界面：</p>\n<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://private-user-images.githubusercontent.com/11450939/401762566-3186e76a-486a-4e61-98a1-2d4b4f91fad0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS80MDE3NjI1NjYtMzE4NmU3NmEtNDg2YS00ZTYxLTk4YTEtMmQ0YjRmOTFmYWQwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVkMmYzMDlkODFjOTIyYjg0MmRhNzdmYTk5OTYwZGU3ZjIwOGJhMTQ4OThiNDNkZjMwYjk1OGIzODEyMWU1YzMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.FMwKqg_wu04NeAeO8NzMix-CGr3O3ZJKbsGzTD3M0ZM\"><img width=\"1200\" alt=\"network\" src=\"https://private-user-images.githubusercontent.com/11450939/401762566-3186e76a-486a-4e61-98a1-2d4b4f91fad0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS80MDE3NjI1NjYtMzE4NmU3NmEtNDg2YS00ZTYxLTk4YTEtMmQ0YjRmOTFmYWQwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVkMmYzMDlkODFjOTIyYjg0MmRhNzdmYTk5OTYwZGU3ZjIwOGJhMTQ4OThiNDNkZjMwYjk1OGIzODEyMWU1YzMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.FMwKqg_wu04NeAeO8NzMix-CGr3O3ZJKbsGzTD3M0ZM\" style=\"max-width: 100%;\"></a>\n<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://private-user-images.githubusercontent.com/11450939/401763855-2e336403-4810-48e5-91c1-6f22dcda7388.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS80MDE3NjM4NTUtMmUzMzY0MDMtNDgxMC00OGU1LTkxYzEtNmYyMmRjZGE3Mzg4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTAwY2Q3NzI4ZTg4MjIxMDNiNTg5ODFhM2YyYWZkZmFkYmNlMzk2YTI2YThlNzUwN2YzOTgzODAyYmY1NjJjZDQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.UuWbSSnBpBoi1ReU4Ju5RCBuBc3vc4EiVbh71vqrqYA\"><img width=\"1200\" alt=\"rules\" src=\"https://private-user-images.githubusercontent.com/11450939/401763855-2e336403-4810-48e5-91c1-6f22dcda7388.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS80MDE3NjM4NTUtMmUzMzY0MDMtNDgxMC00OGU1LTkxYzEtNmYyMmRjZGE3Mzg4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTAwY2Q3NzI4ZTg4MjIxMDNiNTg5ODFhM2YyYWZkZmFkYmNlMzk2YTI2YThlNzUwN2YzOTgzODAyYmY1NjJjZDQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.UuWbSSnBpBoi1ReU4Ju5RCBuBc3vc4EiVbh71vqrqYA\" style=\"max-width: 100%;\"></a>\n<p dir=\"auto\">其中，Network 为查看抓包界面，Rules 为配置规则，Values 为配置数据界面（配合 Rules 使用），Plugins 为已安装的插件列表。</p>\n<h3 dir=\"auto\">界面功能</h3>\n<details>\n  <summary>重放请求</summary>\n  <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://private-user-images.githubusercontent.com/11450939/398499607-9f8276ac-e089-427b-97f4-becac250ae5e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS8zOTg0OTk2MDctOWY4Mjc2YWMtZTA4OS00MjdiLTk3ZjQtYmVjYWMyNTBhZTVlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM3ZTg3MWQ5ZDk4ZTNlYzlhOWZlYTVhZjMxYmM5YzI5Y2UzZTllOGE2NTFjOWIwY2MxMjBhYzczNTlhNzNiY2UmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.RwXKEt0nbs9sLoca4jRvcfuvp172Q67huoUalemQIpY\"><img width=\"800\" alt=\"image\" src=\"https://private-user-images.githubusercontent.com/11450939/398499607-9f8276ac-e089-427b-97f4-becac250ae5e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS8zOTg0OTk2MDctOWY4Mjc2YWMtZTA4OS00MjdiLTk3ZjQtYmVjYWMyNTBhZTVlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM3ZTg3MWQ5ZDk4ZTNlYzlhOWZlYTVhZjMxYmM5YzI5Y2UzZTllOGE2NTFjOWIwY2MxMjBhYzczNTlhNzNiY2UmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.RwXKEt0nbs9sLoca4jRvcfuvp172Q67huoUalemQIpY\" style=\"max-width: 100%;\"></a>\n</details>\n<details>\n  <summary>编辑或构造请求</summary>\n  <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://private-user-images.githubusercontent.com/11450939/398499917-f2a5b088-72b6-4098-8ba6-3e42f15f3ad8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS8zOTg0OTk5MTctZjJhNWIwODgtNzJiNi00MDk4LThiYTYtM2U0MmYxNWYzYWQ4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQzY2FiZTE0MGJhZmYxYjM4OWU3NTYxZTQwZDkxZDdiNTBkM2U4OTRmMjBlNDYzOTdkOTJlYmE3NTEyMTUzOTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.J05TywkGqtUQeyRvEBV4EFSij0cJg_NMFxZa6LbCkbU\"><img width=\"1200\" alt=\"image\" src=\"https://private-user-images.githubusercontent.com/11450939/398499917-f2a5b088-72b6-4098-8ba6-3e42f15f3ad8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS8zOTg0OTk5MTctZjJhNWIwODgtNzJiNi00MDk4LThiYTYtM2U0MmYxNWYzYWQ4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQzY2FiZTE0MGJhZmYxYjM4OWU3NTYxZTQwZDkxZDdiNTBkM2U4OTRmMjBlNDYzOTdkOTJlYmE3NTEyMTUzOTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.J05TywkGqtUQeyRvEBV4EFSij0cJg_NMFxZa6LbCkbU\" style=\"max-width: 100%;\"></a>\n</details>\n<p dir=\"auto\">其它界面功能参见完整文档：<a href=\"https://wproxy.org/whistle/webui/\" rel=\"nofollow\">https://wproxy.org/whistle/webui/</a></p>\n<h3 dir=\"auto\">规则功能</h3>\n<p dir=\"auto\">Whistle 规则可看成是如下系统 hosts 规则的扩展：</p>\n<div class=\"highlight highlight-text-adblock notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 一个域名对应一个 IP\n127.0.0.1 localhost\n::1 localhost\n# 多个域名对应一个 IP\n10.2.55.3 www.test.com www.example.com\"><pre class=\"notranslate\"><span class=\"pl-c\"># 一个域名对应一个 IP</span>\n127.0.0.1 localhost\n::1 localhost\n<span class=\"pl-c\"># 多个域名对应一个 IP</span>\n10.2.55.3 www.test.com www.example.com</pre></div>\n<p dir=\"auto\">系统 hosts 规则的功能单一，只支持修改 DNS及匹配域名，且有 DNS 缓存问题，无法满足日常工作需求，Whistle 规则扩展了系统 hosts 规则的功能，匹配方式上不仅支持域名匹配、路径匹配、通配符匹配、正则匹配等，还支持通过请求方法，响应状态码、请求（响应）头、请求内容等进一步过滤；功能上不仅支持修改 DNS，还支持修改端口，CNAME，设置代理，修改请求 URL、请求方法、响应状态码、请求头、响应头、请求内容、响应内容等，理论上可以修改 HTTP 请求的所有东西，Whistle 规则格式为：</p>\n<ol dir=\"auto\">\n<li>\n<p dir=\"auto\">默认格式</p>\n<div class=\"highlight highlight-text-adblock notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"pattern operation\"><pre class=\"notranslate\">pattern operation</pre></div>\n</li>\n<li>\n<p dir=\"auto\">支持匹配多个操作</p>\n<div class=\"highlight highlight-text-adblock notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"pattern operation1 operation2 ...\"><pre class=\"notranslate\">pattern operation1 operation2 ...</pre></div>\n</li>\n<li>\n<p dir=\"auto\">支持过滤器</p>\n<div class=\"highlight highlight-text-adblock notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"pattern operation1 operation2 ... includeFilter://filterPattern1 ... excludeFilter://filterPatternN ...\"><pre class=\"notranslate\">pattern operation1 operation2 ... includeFilter://filterPattern1 ... excludeFilter://filterPatternN ...</pre></div>\n<blockquote>\n<p dir=\"auto\">多个 filter 之间是 或 的关系，即满足其中一个条件即可</p>\n</blockquote>\n</li>\n<li>\n<p dir=\"auto\">支持位置调换（前提：operation 与 pattern 不同时为 URL 或域名）</p>\n<div class=\"highlight highlight-text-adblock notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"operation pattern [filters ...]\noperation pattern1 pattern2 ... [filters ...]\"><pre class=\"notranslate\">operation pattern [filters ...]\noperation pattern1 pattern2 ... [filters ...]</pre></div>\n</li>\n<li>\n<p dir=\"auto\">支持换行</p>\n<div class=\"highlight highlight-text-adblock notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"line`\noperation\npattern1\npattern2 ...\n[filters ...]\n`\"><pre class=\"notranslate\">line`\noperation\npattern1\npattern2 ...\n[<span class=\"pl-ii\">filters ...</span>]\n`</pre></div>\n</li>\n</ol>\n<p dir=\"auto\">具体例子如下：</p>\n<h5 dir=\"auto\">修改 DNS（设置 Hosts）</h5>\n<ol dir=\"auto\">\n<li>\n<p dir=\"auto\">域名匹配</p>\n<div class=\"highlight highlight-text-adblock notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"www.test.com 127.0.0.1\n# 支持带端口\nwww.test.com 127.0.0.1:8080\n# CNAME 功能（端口可选）\nwww.test.com host://www.example.com:8181\"><pre class=\"notranslate\">www.test.com 127.0.0.1\n<span class=\"pl-c\"># 支持带端口</span>\nwww.test.com 127.0.0.1:8080\n<span class=\"pl-c\"># CNAME 功能（端口可选）</span>\nwww.test.com host://www.example.com:8181</pre></div>\n<blockquote>\n<p dir=\"auto\">与系统 hosts 规则不同的是 Whistle 规则默认采用<strong>从左到右的映射方式</strong>，<strong>从上到下的优先级</strong>，但在 operation 与 pattern 不同时为 URL 或域名情况下可调换位置，所以也兼容系统 hosts 规则，即：<code class=\"notranslate\">127.0.0.1:8080 www.test.com</code></p>\n</blockquote>\n</li>\n<li>\n<p dir=\"auto\">路径匹配</p>\n<div class=\"highlight highlight-text-adblock notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"www.test.com/path/to 127.0.0.1:8080\n# 支持带协议\nhttps://www.test.com/path/to 127.0.0.1:8080\"><pre class=\"notranslate\">www.test.com/path/to 127.0.0.1:8080\n<span class=\"pl-c\"># 支持带协议</span>\nhttps://www.test.com/path/to 127.0.0.1:8080</pre></div>\n</li>\n<li>\n<p dir=\"auto\">通配符匹配</p>\n<div class=\"highlight highlight-text-adblock notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 域名通配符，匹配 test.com 的所有子代域名\n**.test.com 127.0.0.1:8080\n# 支持带协议域名通配符\nhttps://**.test.com 127.0.0.1:8080\n# 路径通配符（* 是路径的合法字符，所以前面要加 ^ 告诉 Whistle 是通配符）\n^**.test.com/*/path/to 127.0.0.1:8080\n# 支持带协议路径通配符\n^https://**.test.com/*/path/to 127.0.0.1:8080\"><pre class=\"notranslate\"><span class=\"pl-c\"># 域名通配符，匹配 test.com 的所有子代域名</span>\n<span class=\"pl-k\">**</span>.test.com 127.0.0.1:8080\n<span class=\"pl-c\"># 支持带协议域名通配符</span>\nhttps://<span class=\"pl-k\">**</span>.test.com 127.0.0.1:8080\n<span class=\"pl-c\"># 路径通配符（* 是路径的合法字符，所以前面要加 ^ 告诉 Whistle 是通配符）</span>\n<span class=\"pl-k\">^**</span>.test.com/<span class=\"pl-k\">*</span>/path/to 127.0.0.1:8080\n<span class=\"pl-c\"># 支持带协议路径通配符</span>\n<span class=\"pl-k\">^</span>https://<span class=\"pl-k\">**</span>.test.com/<span class=\"pl-k\">*</span>/path/to 127.0.0.1:8080</pre></div>\n<blockquote>\n<p dir=\"auto\"><code class=\"notranslate\">*</code>、<code class=\"notranslate\">**</code>、<code class=\"notranslate\">***</code> 匹配的范围不同，详情参见完整文档：<a href=\"https://wproxy.org/whistle/pattern.html\" rel=\"nofollow\">https://wproxy.org/whistle/pattern.html</a></p>\n</blockquote>\n</li>\n<li>\n<p dir=\"auto\">正则匹配</p>\n<div class=\"highlight highlight-text-adblock notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 内部的 `/` 可以不转义，等价于 `new RegExp('^https?://\\w+\\.test\\.com')`\n/^https?://\\w+\\.test\\.com/ 127.0.0.1:8080\"><pre class=\"notranslate\"><span class=\"pl-c\"># 内部的 `/` 可以不转义，等价于 `new RegExp('^https?://\\w+\\.test\\.com')`</span>\n/<span class=\"pl-k\">^</span>https?://\\w+\\.test\\.com/ 127.0.0.1:8080</pre></div>\n</li>\n<li>\n<p dir=\"auto\">过滤匹配</p>\n<div class=\"highlight highlight-text-adblock notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# `pattern` 同上面的域名、路径、正则，表示除了匹配 `pattern` 还要满足请求头 `cookie` 包含 `env=test`\npattern 127.0.0.1:8080 includeFilter://reqH.cookie=/env=test/\"><pre class=\"notranslate\"><span class=\"pl-c\"># `pattern` 同上面的域名、路径、正则，表示除了匹配 `pattern` 还要满足请求头 `cookie` 包含 `env=test`</span>\npattern 127.0.0.1:8080 includeFilter://reqH.cookie=/env=test/</pre></div>\n</li>\n</ol>\n<h5 dir=\"auto\">修改表单数据</h5>\n<div class=\"highlight highlight-text-adblock notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 修改表单里面的 `test` 字段的值\npattern reqMerge://test=123\n\n# 删除表单里面的 `abc` 字段\npattern delete://reqBody.abc\"><pre class=\"notranslate\"><span class=\"pl-c\"># 修改表单里面的 `test` 字段的值</span>\npattern reqMerge://test=123\n\n<span class=\"pl-c\"># 删除表单里面的 `abc` 字段</span>\npattern delete://reqBody.abc</pre></div>\n<h5 dir=\"auto\">设置跨域响应头</h5>\n<div class=\"highlight highlight-text-adblock notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# 以路径匹配为例，设置跨域响应头 Access-Control-Allow-Origin: *，且排除 OPTION 请求\npattern resCors://* excludeFilter://m:option\"><pre class=\"notranslate\"><span class=\"pl-c\"># 以路径匹配为例，设置跨域响应头 Access-Control-Allow-Origin: *，且排除 OPTION 请求</span>\npattern resCors://<span class=\"pl-k\">*</span> excludeFilter://m:option</pre></div>\n<p dir=\"auto\">所有规则参见完整文档：<a href=\"https://wproxy.org/whistle/rules/\" rel=\"nofollow\">https://wproxy.org/whistle/rules/</a></p>\n<h3 dir=\"auto\">安装插件</h3>\n<p dir=\"auto\">插件需通过命令行安装：</p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"w2 i whistle.inspect whistle.vase\"><pre class=\"notranslate\">w2 i whistle.inspect whistle.vase</pre></div>\n<blockquote>\n<p dir=\"auto\">上述插功能介绍及源码：<a href=\"https://github.com/whistle-plugins\">https://github.com/whistle-plugins</a>，客户端可通过界面安装 ：<a href=\"https://github.com/avwo/whistle-client\">https://github.com/avwo/whistle-client</a></p>\n</blockquote>\n<p dir=\"auto\">安装后即可在管理界面的 Plugins 看到这两个插件：</p>\n<details>\n  <summary>插件列表示例图</summary>\n  <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://private-user-images.githubusercontent.com/11450939/399532973-ec018691-c7a9-415e-9809-bf079694c024.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS8zOTk1MzI5NzMtZWMwMTg2OTEtYzdhOS00MTVlLTk4MDktYmYwNzk2OTRjMDI0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFhYjU3NzgzOTA1NTI2ZWYwMGE0N2YwZGJiNTc4YzQzOGUyMDk4ZjFkNjJjZDM2YzY2MWMyNmM3NjQxNTg0ZmEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.ILs88vym-5XUf7fpBMvVTARCk6VzfwLDINBYO4QOYgw\"><img width=\"1000\" alt=\"image\" src=\"https://private-user-images.githubusercontent.com/11450939/399532973-ec018691-c7a9-415e-9809-bf079694c024.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NTMwNjc1OTEsIm5iZiI6MTc1MzA2NzI5MSwicGF0aCI6Ii8xMTQ1MDkzOS8zOTk1MzI5NzMtZWMwMTg2OTEtYzdhOS00MTVlLTk4MDktYmYwNzk2OTRjMDI0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwNzIxVDAzMDgxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFhYjU3NzgzOTA1NTI2ZWYwMGE0N2YwZGJiNTc4YzQzOGUyMDk4ZjFkNjJjZDM2YzY2MWMyNmM3NjQxNTg0ZmEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.ILs88vym-5XUf7fpBMvVTARCk6VzfwLDINBYO4QOYgw\" style=\"max-width: 100%;\"></a>\n</details>\n<p dir=\"auto\">每个插件默认可以新增两个规则协议：</p>\n<div class=\"highlight highlight-text-adblock notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"whistle.inspect://xxx\ninspect://xxx\"><pre class=\"notranslate\">whistle.inspect://xxx\ninspect://xxx</pre></div>\n<blockquote>\n<p dir=\"auto\">通过配置插件的自定义规则，可将匹配的请求转发到插件指定 hook 实现自定义功能，如果不需要也可通过插件的 <code class=\"notranslate\">package.json </code> 的 <code class=\"notranslate\"> whistleConfig</code> 设置 <code class=\"notranslate\">\"hideLongProtocol\": true</code> 或 <code class=\"notranslate\">\"hideShortProtocol\": true</code> 隐藏对应规则协议</p>\n</blockquote>\n<p dir=\"auto\">除了扩展规则，插件还支持扩展 Whistle 界面，以及提供操作界面、自带规则等功能，关于插件的安装、使用、开发参见完整文档：<a href=\"https://wproxy.org/whistle/plugins.html\" rel=\"nofollow\">https://wproxy.org/whistle/plugins.html</a></p>\n<h1 dir=\"auto\">License</h1>\n<p dir=\"auto\"><a href=\"./LICENSE\">MIT</a></p>","updatedAt":"2025-05-22T01:53:13Z","upvoteCount":null,"author":{"login":"eryajf","avatarUrl":"https://avatars.githubusercontent.com/u/33259379?u=e4a4090a38ac2473aaed4ef9945233636776c6c3&v=4","url":"https://github.com/eryajf"},"category":null,"labels":{"edges":[{"node":{"name":"更多","color":"25B472"}},{"node":{"name":"抓包工具","color":"9fb26a"}},{"node":{"name":"avwo","color":"6ea428"}}]},"comments":{"edges":[]}}},"pageContext":{"number":607,"previous":{"title":"P3GLEG/Whaler: 能够查看在运行容器的 Dockerfile 的工具","number":606},"next":{"title":"traefik/whoami: 一个提供根据请求返回内容的调试工具。","number":608}}},
    "staticQueryHashes": ["151096407","2861350382"]}