Monitor Android Http Request/Response ด้วย Chuck

Kotchaphan Muangsan
odds.team
Published in
1 min readMay 15, 2018

เนื่องจากมีการพาดพิง อิงนาม ข้าม Platform จาก Blog netfox — A lightweight, one line setup, iOS เป็นเหตุให้ต้องมาเขียนวิธีการ Monitor ดู​ Request/Response ของแอป

แล้วปัจจุบันเรา Monitor Request/Response กันได้ด้วยวิธีไหนบ้าง​?

วิธีการดู Request/Response ของแอปจริง ๆ แล้วสามารถดูได้หลายวิธี ขึ้นอยู่กับว่าใครเป็นคน Monitor บ้าง

  • Logcat
  • Charles Proxy (หรือตัวอื่นๆ)
  • OkHttp Logging interceptor
  • Android Studio Profiler
  • Stetho (By Facebook)
  • Chuck (ตัวที่เรากำลังจะพูดถึง)

แล้วตัวอื่น ๆ ผิดอะไรใยเจ้าถึงเมินเฉย ไม่คิดเอื้อนเอ่ยถึงกัน คำตอบก็คือ ไม่ได้ผิดอะไร และไม่ผิดเลย Log บางอย่างก็ยังต้องใช้งานตัวอื่น ๆ อยู่ แล้ว Chuck มันตอบโจทย์ในเคสไหนบ้าง?

หากใครเป็น Android Developer ที่หน้าตาดี จะรู้ว่าวิธีการ Monitor ทั้ง Locat, Charles, OkHttp Logging interceptor, Android Studio Profiler และ Stetho จำเป็นต้องใช้ความ Geek ในระดับนึง เช่น เสียบมือถือกับคอม แล้วไหนจะต้องเปิด Developer Mode อีก (ถ้ายังไม่ได้เปิด) หรือถ้าไม่เสียบมือถือกับคอมอาจใช้วิธี ADB Wifi ในการ Debug

คำถามก็คือ: การทำแบบนี้ มันสะดวกกับคนอื่น ๆ ในทีมจริงหรือ? อยากดูในแอปเลยได้มั้ย? ดูแค่นี้เองทำไมต้องเสียบสาย?

API Developer เล่น ๆ แอปอยู่ อยากดูว่า Android Request/Response เป็นแบบไหนดูได้ทันที (ถึงจะดูผ่านตัวอื่น ๆ ได้ก็เถอะ)

Tester เล่น ๆ แอปอยู่ อยากดูว่า Android ส่ง Request ไปแบบไหน รับ Response มาแบบไหน แสดงผลถูกต้องหรือไม่ ไฉนแล้วทำไมจึงจำเป็นต้องยากเย็น ผิดถูกรู้ได้ทันทีระหว่างเล่นแอป เร็วกว่ากันเยอะ

นั่นแหละ Chuck มันตอบโจทย์ในเคสแบบนี้

ติดตั้งเถอะพ่อเอ้ย

dependencies {
debugImplementation 'com.readystatesoftware.chuck:library:1.1.0'
releaseImplementation 'com.readystatesoftware.chuck:library-no-op:1.1.0'
}

วิธีใช้ (อย่าลืมเพิ่ม OkHttp ด้วยนะ เพราะ Chuck ต้องใช้กับ OkHttp)

: KotlinOkHttpClient.Builder()
.addInterceptor(ChuckInterceptor(context))
.build()
: JavaAvoid Java code in Android

ง่าย ๆ แบบนี้แหละ ไม่มีอะไรซับซ้อน แค่ใช้คนอื่นทำให้ความซับซ้อนนั้นก็จะหายไป

Source Code: https://github.com/WeRockStar/ChuckHttpInspector

reference:

https://github.com/jgilfelt/chuck

--

--