网络检查器无法捕获网络请求 - Android

问题描述 投票:0回答:1

我使用ktor CIO引擎进行API调用。当我尝试检查网络调用但 URL 未显示在 Android studio 网络检查中时。性能测试团队尝试使用 Fiddler 工具拦截 API 调用,但也无法捕获 API 调用。

我必须更改应用程序内的任何设置吗?

我已将 cleartextTrafficPermission 添加为 true,以用于系统和用户的测试。

 <base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <certificates src="system" />
        <certificates src="user" />
    </trust-anchors>
</base-config>

我尝试在 AndroidManifest 文件中添加cleartextTrafficPermissed 也用于测试。但似乎没有任何作用。我在这里错过了什么吗?

Ktor 实现如下:

@Provides
@Singleton
fun provideHttpClient(): HttpClient = HttpClient(CIO) {

    expectSuccess = false
    install(ContentNegotiation) {
        gson()
    }

    install(Logging) {
        logger = Logger.DEFAULT
        level = LogLevel.ALL
    }
    
    install(HttpTimeout) {
        requestTimeoutMillis = 120000
        connectTimeoutMillis = 120000
        socketTimeoutMillis = 120000
    }

    engine {
        https {
            trustManager = @SuppressLint("CustomX509TrustManager")
            object : X509TrustManager {
                @SuppressLint("TrustAllX509TrustManager")
                override fun checkClientTrusted(p0: Array<out X509Certificate>?, p1: String?) {
                }

                @SuppressLint("TrustAllX509TrustManager")
                override fun checkServerTrusted(p0: Array<out X509Certificate>?, p1: String?) {
                }

                override fun getAcceptedIssuers(): Array<X509Certificate>? = null
            }
        }
    }

    HttpResponseValidator {
        validateResponse { response: HttpResponse ->
            val statusCode = response.status.value

            println("HTTP status: $statusCode")

            when (statusCode) {
                in 300..399 -> throw RedirectResponseException(response, statusCode.toString())
                in 400..499 -> throw ClientRequestException(response, statusCode.toString())
                in 500..599 -> throw ServerResponseException(response, statusCode.toString())
            }

            if (statusCode >= 600) {
                throw ResponseException(response, statusCode.toString())
            }
        }

        handleResponseExceptionWithRequest { cause, request ->
            println("HTTP status: $cause")
            throw cause
        }
    }

}
android kotlin fiddler ktor network-inspection
1个回答
0
投票

您似乎正在使用 Ktor 与 CIO 引擎在 Android 应用程序中进行 API 调用,但您在 Android Studio 网络检查和 Fiddler 工具中捕获网络调用时遇到问题。以下是一些可帮助您排除故障并解决问题的建议:

检查互联网权限: 确保您的 AndroidManifest.xml 文件包含互联网访问所需的权限。添加以下行(如果不存在):

xml

<uses-permission android:name="android.permission.INTERNET" />

网络安全配置: 如果您已在清单中将cleartextTrafficPermission 设置为 true,则它应该允许 HTTP 流量。但是,请确保您已正确定义网络安全配置。在 res/xml/ 目录中创建一个 network_security_config.xml 文件,其中包含以下内容:

xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </base-config>
</network-security-config>

在清单中引用此文件:

xml

<application
    android:networkSecurityConfig="@xml/network_security_config"
    ...>

验证Fiddler配置: 如果您的性能测试团队尝试使用 Fiddler 拦截 API 调用,请确保 Fiddler 已正确配置。确保 Fiddler 正在运行并配置为捕获流量。仔细检查设备或模拟器是否配置为使用 Fiddler 代理。

验证 Android Studio 配置: 确保 Android Studio 已正确配置用于网络检查。确保您使用的设备或模拟器具有正确的代理设置,并且 Android Studio 设置为捕获网络流量。

登录Ktor: 您的 Ktor HttpClient 配置为启用日志记录。检查 Android Studio Logcat 输出中是否有与 HTTP 请求相关的任何日志。这可以帮助您识别请求的任何问题。

检查 SSL 问题: 由于您使用的是自定义信任管理器,因此请确保正确处理 SSL 证书。如果存在与 SSL 相关的问题,它们可能会阻止捕获网络流量。

通过仔细检查和调整这些配置,您应该能够在 Android Studio 网络检查和 Fiddler 中捕获网络调用。如果问题仍然存在,您还可以考虑查看其他潜在因素,例如代理设置、防火墙或其他网络相关配置。

© www.soinside.com 2019 - 2024. All rights reserved.