/httptracking

๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ์•ฑ ๊ฐœ๋ฐœ์‹œ ๊ฐ„๋‹จํ•˜๊ฒŒ HTTP ๋ฅผ ๋ณผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Primary LanguageKotlinMIT LicenseMIT


์•ฑ ๊ฐœ๋ฐœ์‹œ Log.d ๋ณด์ง€ ์•Š๊ณ  BottomSheetDialog ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ณผ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐœ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.


AndroidMinSdkVersion AndroidTargetSdkVersion

์•ˆ๋“œ๋กœ์ด๋“œ HTTP ํ†ต์‹ ์„ Netty๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด...๋น ๋ฅด๊ฒŒ ๋’ค๋กœ๊ฐ€๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š” ๐Ÿ˜ญ

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” OkHttp3 ๊ธฐ์ค€์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์•ฑ์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ๋‹จ๋ง๊ธฐ๋ฅผ ํ”๋“ค๋ฉด ํŠธ๋ž˜ํ‚นํ•œ ๋กœ๊ทธ๋“ค์„ ๊ฐ„๋‹จํžˆ ๋ณผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • Project Gradle (kts)
allprojects {
    repositories {
        maven { url = URI("https://jitpack.io") }
    }
}
  • App Module Gradle
dependencies {
    // UI
    implementation("com.github.sieunju.httptracking:ui:$latestVersion")
    // Interceptor Java Module
    implementation("com.github.sieunju.httptracking:interceptor:$latestVersion")
}

์œ ์˜์‚ฌํ•ญ

  • ํ˜น์‹œ๋‚˜ ๋จธํ‹ฐ๋ฆฌ์–ผ์„ ์‚ฌ์šฉํ•˜์‹œ๊ฑฐ๋‚˜ ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉ์ค‘์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ž‘ ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ™‡โ€โ™‚๏ธ
  • A.K.A exclude
implementation("com.github.sieunju.httptracking:ui:${lateversion}") {
    exclude("com.google.android.material")
    exclude("androidx.appcompat:appcompat")
    exclude("androidx.constraintlayout")
}

์‚ฌ์šฉ๋ฐฉ๋ฒ•

Builder ํŒจํ„ด์œผ๋กœ Application Class ์—์„œ ๊ฐ„๋‹จํžˆ ๋นŒ๋“œ ํƒ€์ž…์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

Application.kt

HttpTracking.Builder()
    .setBuildType(BuildConfig.DEBUG)
    .setLogMaxSize(3000)
    .build(this)

OkHttpClient ์—์„œ โ€˜addInterceptorโ€™ ๋ฅผ ํ†ตํ•ด TrackingHttpInterceptor ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋˜๋„๋ก์ด๋ฉด ๋””๋ฒ„๊ทธ๋ชจ๋“œ์—๋งŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค.

OkHttpClient.Builder().apply{
    if(Debug) {
        addInterceptor(TrackingHttpInterceptor)
    }
}
UI Example
UI

PC๋กœ ๋กœ๊ทธ ํ™•์ธ ํ•˜๋Š” ๋ฐฉ๋ฒ•

setWifiShare(true)

HttpTracking.Builder()
    .setBuildType(BuildConfig.DEBUG)
    .setWifiShare(true)
    .setLogMaxSize(3000)
    .build(this)
Step 1 Step 2 Step 3
Step1 Step2 Step3

์œ„์— ํ™”๋ฉด์ฒ˜๋Ÿผ ์›ํ•˜๋Š” ๋กœ๊ทธ๋ฅผ ์„ ํƒํ•˜์‹œ๊ณ  ๊ณต์œ  ํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ์„ ํƒํ•˜์‹œ๋ฉด http://{ip}:{port}/tracking ์ฃผ์†Œ๊ฐ€ ๋…ธ์ถœ๋˜๋Š”๋ฐ ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ PC์— ์ž…๋ ฅํ•˜์‹œ๋ฉด ์„ ํƒํ•œ ๋กœ๊ทธ๋ฅผ ๋ณผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿคฉ

๐Ÿ™ ๊ณต๊ณต์žฅ์†Œ์—์„œ ์‚ฌ์šฉ์€ ์ ˆ๋Œ€๋กœ ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค. (๋ณธ์ธ์˜ HTTP ํ†ต์‹  ๋กœ๊ทธ๋ฅผ ๋ˆ„๊ตฐ๊ฐ€ ๋ณผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค..)