【问题标题】:Okhttp mock server is not working on API 28 and above simulatorOkhttp 模拟服务器不适用于 API 28 及更高版本的模拟器
【发布时间】:2020-02-01 15:00:41
【问题描述】:

我的模拟服务器调度程序从未达到模拟器上的覆盖方法运行 API 28 及更高版本,但在其他版本上运行良好。知道如何触发它吗?还是只是 API 版本问题?

我指向 localhost:8080。 并且okhttp版本是4.2.1。

fun search() {
    sleepSafely(3000)
    mockServer = MockWebServer()
    mockServer.dispatcher = ErrorDispatcher()
    mockServer.start(8080)
    sleepSafely(3000)
    // do the API request
}

public class ErrorDispatcher extends Dispatcher {

    @NotNull
    @Override
    public MockResponse dispatch(RecordedRequest request) {
        // never be triggered
        String path = request.getPath();
        if (path.equalsIgnoreCase("/api/v2/search/person")) {
            return new MockResponse()
                    .setResponseCode(404)
                    .setBody("{"MOCK_KEY": "MOCK_VALUE"}");
        } else if (path.equalsIgnoreCase("/api/v2/search/book")) {
            return new MockResponse()
                    .setResponseCode(404);
        } else {
            return new MockResponse().setResponseCode(404);
        }
    }
}

【问题讨论】:

标签: android okhttp mockserver


【解决方案1】:

我相信这是因为 Android API 28+ 不再支持明文 HTTP 流量,而 MockWebServer 在 HTTP 上运行。

一位用户评论了this issue,建议将android:usesCleartextTraffic="true" 添加到您的测试清单中。

【讨论】:

    【解决方案2】:

    你说得对,OKHttp3 MockServer 不适用于 API 28 及更高版本。我正在使用 'com.squareup.okhttp3:mockwebserver:4.0.1',我需要将我的项目降级到 27 才能让它工作。

    【讨论】:

    • 是的,这很痛苦。我可能会在 repo 上讨论一个问题。
    • @Allen 你在 okhttp repo 上打开了一个问题吗?我有兴趣关注它。我也有同样的问题。
    猜你喜欢
    • 2020-02-03
    • 2023-03-19
    • 2013-01-04
    • 1970-01-01
    • 2013-10-30
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多