Захват данных запроса и ответа с помощью OKHttp с bytebuddy android, показывающий ошибку:Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Захват данных запроса и ответа с помощью OKHttp с bytebuddy android, показывающий ошибку:

Сообщение Anonymous »

при попытке перехватить запрос и ответ данных OKHttp с помощью byteBuddy Android возникла эта ошибка.
какой подход мне следует использовать? как я могу автоматически перехватывать данные OKHttp с помощью byteBudyy android?
вот ошибка

Код: Выделить всё

java.lang.IllegalStateException: Illegal method name interface okhttp3.Authenticator for public final okhttp3.Authenticator okhttp3.OkHttpClient.-deprecated_authenticator()
at net.bytebuddy.dynamic.scaffold.InstrumentedType$Default.validated(InstrumentedType.java:1746)
at net.bytebuddy.dynamic.scaffold.MethodRegistry$Default.prepare(MethodRegistry.java:519)
at net.bytebuddy.dynamic.scaffold.inline.RedefinitionDynamicTypeBuilder.toTypeWriter(RedefinitionDynamicTypeBuilder.java:213)
at net.bytebuddy.dynamic.scaffold.inline.AbstractInliningDynamicTypeBuilder.toTypeWriter(AbstractInliningDynamicTypeBuilder.java:127)
at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$UsingTypeWriter.make(DynamicType.java:4057)
at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase.make(DynamicType.java:3741)
at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Delegator.make(DynamicType.java:3993)
at com.rnadigital.monita_android.MyApplicationKt.setupOkHttpBuilderByteBuddy(MyApplication.kt:84)
at com.rnadigital.monita_android.MyApplication.onCreate(MyApplication.kt:42)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1316)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6998)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2236)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8177)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
вот мой код

Код: Выделить всё

    class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

// Byte Buddy setup to intercept methods in OkHttpClient
ByteBuddy()
.redefine(OkHttpClient::class.java)
.method(named("newCall")
.and(not(named("-deprecated_authenticator")))
.and(not(isDeclaredBy(Authenticator::class.java))))
.intercept(MethodDelegation.to(OkHttpInterceptor::class.java))
.make()
.load(
this.javaClass.classLoader,
AndroidClassLoadingStrategy.Wrapping(this.filesDir)
)

// Now create the OkHttpClient instance, which will be affected by the instrumentation
val okHttpClient = OkHttpClient.Builder().build()

// Example of making a request to test the interceptor
val request = Request.Builder()
.url("https://example.com")
.build()

val call = okHttpClient.newCall(request)
val response = call.execute()
println("Response: ${response.body?.string()}")
}
}

class OkHttpInterceptor {
@RuntimeType
fun intercept(
@This proxy: Any,
@Origin method: Method,
@AllArguments args: Array
): Any {
// Log the request details
if (args.isNotEmpty() && args[0] is Request) {
val request = args[0] as Request
println("Request URL: ${request.url}")
println("Request Headers: ${request.headers}")
println("Request Body: ${request.body}")
}

// Call the original method
val result = method.invoke(proxy, *args)

// Log the response details if applicable
if (result is Response) {
println("Response Code: ${result.code}")
println("Response Body: ${result.body?.string()}")
}

return result
}
}
пожалуйста, предложите какой-нибудь справочный код для этого, если он доступен для Android.
могу ли я использовать собственный клиент OKHttp

Код: Выделить всё

val okHttpClient = OkHttpClient.Builder()
.addInterceptor(LoggingInterceptor())
.build()
или есть ли другой подход?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -showing-e
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»