docs/en/docs/faq.md
Please file an issue if you encounter any issues or suggestions.
Tunnel to? {#tunnel-to}This typically occurs in the following scenarios. Please identify your specific situation and follow the corresponding solution:
Regular TCP connection (cannot be parsed as HTTP/HTTPS request)
HTTPS Capture Not Enabled (Most Common)
Enable HTTPS option. As a result, Whistle cannot decrypt HTTPS traffic and can only display it as an encrypted tunnel.Enable HTTPS option.
Capture Error (captureError)
captureError?Request to an IP Address
https://192.168.1.1) instead of a domain name. Most clients do not send SNI information for such requests, preventing Whistle from automatically recognizing them as HTTPS.captureError appear in the packet capture list? {#capture-error}domain-name disable://capture or only for requests from a specific client: domain-name disable://capture includeFilter://reqH.user-agent=/xiaomi/iSolution 1: Install a certificate separately for Firefox
In Firefox settings:
- Go to Options > Privacy & Security > Certificates
- Click "View Certificate" → "Certificate Authority"
- Import the downloaded .cer file
- Check all "Trust this CA" options
Solution 2: Force Firefox to use the system certificate (Recommended)
- Search for preferences: security.enterprise_roots.enabled
- Change the value to true
- Restart the browser for the changes to take effect
Enable HTTPS?{#capture-ip}This is because for HTTPS requests directly initiated using an IP address, the client typically does not send SNI (Server Name Indication) information during the handshake phase. The absence of SNI makes it difficult for Whistle to quickly determine whether it is an HTTPS request that needs decryption, and since most such requests are ordinary TCP traffic, Whistle may treat them as regular TCP traffic. You can configure rules to explicitly instruct Whistle to recognize requests to specific IPs as HTTPS and perform decryption capture:
ip[:port] enable://captureIp
# Or
ip[:port] enable://capture
Client certificate settings reference: @clientCert://
~/.WhistleAppData/whistle.logRunning multiple instances requires the following:
w2 start
2 start -p 8100 -S storageName2
By default, Whistle treats all requests sent to the proxy port (e.g., 127.0.0.1:8899) as internal management requests. You can use the /-/ path prefix to bypass internal request detection. For example:
http://127.0.0.1:8899/-/xxx: Whistle automatically converts the request to a normal request http://127.0.0.1:8899/xxxhttp://127.0.0.1:8899/xxx https://www.test.com/xxx
Open the Settings dialog box in the Rules interface and check Use multiple rules.
Use filters:
Check whether "Full Trust" is set: Settings → General → About This Device → Certificate Trust Settings
domain disable://capture or only for requests from a specific client: domain disable://capture includeFilter://reqH.user-agent=/xiaomi/iw2 start -n username -w password or develop your own plugin (./extensions/dev) to prevent unauthorized access to rules and configurations.Go to the certificate management page
.crt suffix.key suffixFile name requirements:
Standard domain name certificate
example.com.crt↔example.com.keyRoot certificate (must be named precisely)
root.crt↔root.key
For the client version, simply download and install the latest version: https://github.com/avwo/whistle-client
Command line version update:
npm i -g whistle && w2 restart
If you encounter slow installation or installation failures, try changing the mirror:
npm i -g whistle --registry=https://registry.npmmirror.com && w2 restartIf you encounter permission issues, add
sudo:shsudo npm i -g whistle w2 restart
After restarting, the Whistle version displayed in the command line may not match the currently installed version. This may be due to a Node.js version update that changed your PATH.
Solution:
w2 -V
which w2 # Linux/Mac
where w2 # Windows
# Delete the old version (based on the path found in the previous step)
rm -f /usr/local/bin/w2 # Example path
# Windows example (requires administrator privileges)
del "C:\Program Files\nodejs\w2.cmd"
w2 -V to check if the version is updated:
w2 command cannot be found, manually configure the PATH.Frequent polling requests (such as heartbeat detection or status reporting) can flood the screen and interfere with the analysis of primary requests. You can quickly hide them by following these steps:
Locate any polling request in the packet list, then right-click and select the appropriate filtering rule from the context menu:
Settings / Exclude All Matching Hosts: Hides all requests from the corresponding domain (effective only for the current browser session).Settings / Exclude All Matching URLs: Hides all requests matching the current URL (excluding query parameters, and effective only for the current browser session).Whistle documentation source file address: https://github.com/avwo/whistle/tree/master/docs
Start the documentation server locally:
npm run docs:dev
Default Behavior
Content-Type: text/event-stream, the response content is automatically displayed in chunks within the Frames panel.disable://captureStream.Ordinary HTTP/HTTPS Requests
If you want the body of an ordinary HTTP/HTTPS request or response to be displayed in chunks within the Frames panel (similar to SSE), you need to manually configure whistle rules to force stream capture and specify a custom frame separator.
# Set the separator to newline \n (%A0 is the URL-encoded form of \n; SSE uses \n\n by default)
pattern disable://gzip enable://captureStream reqHeaders://(x-whistle-custom-frame-separator=%A0) resHeaders://(x-whistle-custom-frame-separator=%A0)
Rule Explanation
disable://gzip: Disables compression to ensure streaming is not interrupted.enable://captureStream: Forces stream capture.reqHeaders://(...) / resHeaders://(...): Adds a custom header x-whistle-custom-frame-separator=%A0 to the request or response, where %A0 represents the newline character \n.Regarding Separator Visibility
By default, the separator is not displayed in the Frames panel. If you need the separator to be visible, prefix the separator value with/. For example:
x-whistle-custom-frame-separator=/%A0
New issue: https://github.com/avwo/whistle/issues