Skip to content

mitmproxy mode local doesn't work in mitmproxy-java #23

@olezvinskyi

Description

@olezvinskyi

Env:
Java 17,
mitmproxy 11.1.3,
mitmproxy-java: 2.0.2
macOS 15.3.1

Steps:

  1. Run mitmweb --mode local
  2. Accept all permissions for Mitmproxy Redirector
  3. Close mitmweb
  4. Start mitmproxy through Java tests
    @Step("Start Mitmproxy on port {portNumber}")
    public static void startMitmproxyOnPort(Integer portNumber) {
            List<InterceptedMessage> messages = new ArrayList<InterceptedMessage>();

            List<String> extraMitmproxyParams;
                 extraMitmproxyParams = Arrays.asList(
                         "--mode", "local",
                         "--showhost"
                 );
            extraMitmproxyParams = extraMitmproxyParams.stream().filter(str -> !str.isEmpty()).collect(Collectors.toList());

            ReporterUtil.log("Mitmproxy parameters: ", extraMitmproxyParams.toArray(String[]::new));
            mitmproxyJava = new MitmproxyJava(config().mitmdumpPath(), (InterceptedMessage m) -> {
                System.out.println("intercepted request for " + m.getRequest().getUrl());
                messages.add(m);
                return m;
            }, portNumber, extraMitmproxyParams);

            try {
                ReporterUtil.log("Start Mitmproxy");
                mitmproxyJava.start();
                ReporterUtil.log("Mitmproxy is started");
            } catch (Exception e) {
                e.printStackTrace();
                ReporterUtil.log("Cannot start mitmproxy");
                throw new RuntimeException(e);
            }
    }

Obtained result:

[main] WARN com.codeborne.selenide.logevents.SelenideLogger - No listeners found for thread '1'
[main] INFO com.tunein.mobile.utils.ReporterUtil - Mitmproxy parameters: 
[main] INFO com.tunein.mobile.utils.ReporterUtil - --mode
[main] INFO com.tunein.mobile.utils.ReporterUtil - local
[main] INFO com.tunein.mobile.utils.ReporterUtil - -vvv
[main] INFO com.tunein.mobile.utils.ReporterUtil - --showhost
[main] INFO com.tunein.mobile.utils.ReporterUtil - Start Mitmproxy
[main] INFO io.appium.mitmproxy.MitmproxyJava - Starting mitmproxy on port 8089
[WebSocketSelector-34] INFO org.java_websocket.server.WebSocketServer - websocket server started successfully
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - Error logged during startup, exiting...
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.509] Using existing mitmproxy redirector app.
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.514] Initializing macOS proxy ...
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.515] Starting redirector app...
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.533] = connection is CONNECTING
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.533] > GET / HTTP/1.1
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.533] > Host: localhost:8765
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.533] > Upgrade: websocket
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.533] > Connection: Upgrade
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.533] > Sec-WebSocket-Key: /23BzkBekmaCjx244lhJMg==
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.533] > Sec-WebSocket-Version: 13
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.533] > Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.533] > User-Agent: Python/3.12 websockets/12.0
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.547] < HTTP/1.1 101 Web Socket Protocol Handshake
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.547] < Connection: Upgrade
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.547] < Date: Tue, 18 Feb 2025 13:41:12 GMT
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.547] < Sec-WebSocket-Accept: SPonIP1a6+vBH3kyquqeDIKQmFg=
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.547] < Server: TooTallNate Java-WebSocket
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.547] < Upgrade: websocket
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.547] = connection is OPEN
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.547] > PING c1 cd 76 f3 [binary, 4 bytes]
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.575] Redirector app exited successfully.
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.576] Waiting for control channel...
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.636] Control channel connected.
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.636] macOS proxy successfully initialized.
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.637] Local redirector started.
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.729] Python interoperability task shutting down.
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - [15:41:12.730] Task failed: macOS System Extension shut down.
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - disabled backtrace
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - Error in sys.excepthook:
[Thread-13] INFO io.appium.mitmproxy.MitmproxyJava - Original exception was:
java.util.concurrent.TimeoutException: Timed out waiting for mitmproxy to start
	at io.appium.mitmproxy.MitmproxyJava.waitForPortToBeInUse(MitmproxyJava.java:138)
	at io.appium.mitmproxy.MitmproxyJava.start(MitmproxyJava.java:84)
	at com.tunein.mobile.mitmproxy.MitmproxyDriverProvider.startMitmproxyOnPort(MitmproxyDriverProvider.java:260)
	at com.tunein.BaseTest.beforeSuite(BaseTest.java:46)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:141)
	at org.testng.internal.invokers.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:71)
	at org.testng.internal.invokers.ConfigInvoker.invokeConfigurationMethod(ConfigInvoker.java:400)
	at org.testng.internal.invokers.ConfigInvoker.invokeConfigurations(ConfigInvoker.java:333)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:358)
	at org.testng.SuiteRunner.run(SuiteRunner.java:312)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:95)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1274)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1208)
	at org.testng.TestNG.runSuites(TestNG.java:1112)
	at org.testng.TestNG.run(TestNG.java:1079)
	at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
	at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)
[main] INFO com.tunein.mobile.utils.ReporterUtil - Cannot start mitmproxy
java.lang.RuntimeException: java.util.concurrent.TimeoutException: Timed out waiting for mitmproxy to start
	at com.tunein.mobile.mitmproxy.MitmproxyDriverProvider.startMitmproxyOnPort(MitmproxyDriverProvider.java:265)
	at com.tunein.BaseTest.beforeSuite(BaseTest.java:46)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:141)
	at org.testng.internal.invokers.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:71)
	at org.testng.internal.invokers.ConfigInvoker.invokeConfigurationMethod(ConfigInvoker.java:400)
	at org.testng.internal.invokers.ConfigInvoker.invokeConfigurations(ConfigInvoker.java:333)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:358)
	at org.testng.SuiteRunner.run(SuiteRunner.java:312)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:95)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1274)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1208)
	at org.testng.TestNG.runSuites(TestNG.java:1112)
	at org.testng.TestNG.run(TestNG.java:1079)
	at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
	at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)
Caused by: java.util.concurrent.TimeoutException: Timed out waiting for mitmproxy to start
	at io.appium.mitmproxy.MitmproxyJava.waitForPortToBeInUse(MitmproxyJava.java:138)
	at io.appium.mitmproxy.MitmproxyJava.start(MitmproxyJava.java:84)
	at com.tunein.mobile.mitmproxy.MitmproxyDriverProvider.startMitmproxyOnPort(MitmproxyDriverProvider.java:260)
	... 19 more

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions