尝试使用stetho拦截器配合Chrome调试网络请求

准备工作

  • 首先是集成Stetho开发包和 引入RxJava 框架
apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.example.nc039.fanldemo"
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.amitshekhar.android:android-networking:1.0.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test:rules:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    implementation 'com.android.support.test.espresso:espresso-intents:3.0.1'
    implementation 'com.amitshekhar.android:jackson-android-networking:1.0.1'
    //-- Stetho开发包 start--
    implementation 'com.facebook.stetho:stetho:1.3.1'
    implementation 'com.facebook.stetho:stetho-okhttp3:1.3.1'
    //-- Stetho开发包 end--
    //-- RxJava2.0  start --
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
    implementation 'io.reactivex.rxjava2:rxjava:2.1.0'
    //-- RxJava2.0  end --
}
  • Activity的onCreate中进行Stetho拦截器初始化
 Stetho.initializeWithDefaults(this);
  • 使用当前API的OkHttp3.0框架进行网络请求,添加拦截器
    private OkHttpClient okHttpClient=new OkHttpClient.Builder()
            .addNetworkInterceptor(new StethoInterceptor())
            .build();

测试用例

  • 为了方便比较,分别使用未重定向的https://www.baidu.com 和重定向的http://www.baidu.com进行测试,利用Chrome的inspect查看器观察测试试验过程

    • 设置按钮点击事件,用inspect查看器 捕捉网络请求过程:
 @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.btnStart1:
                url="http://www.baidu.com";
                Request request = new Request.Builder()
                        .url(url)
                        .build();
                    final Call call1 = okHttpClient.newCall(request);
                    updateUI(call1);
                break;
            case R.id.btnStart2:
                url="https://www.baidu.com";
                request = new Request.Builder()
                        .url(url)
                        .build();
                final Call call2 = okHttpClient.newCall(request);
                updateUI(call2);
        }
    }
  • 请求结果用RxJava处理进行UI同步显示:
  private void updateUI(final Call call){
        Observable.create(new ObservableOnSubscribe(){
            @Override
            public void subscribe(@NonNull ObservableEmitter e) throws Exception {
                Response response = call.execute();
                e.onNext(response.body().string());
                e.onComplete();
            }
        }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {

                    }

                    @Override
                    public void onNext(@NonNull String  ret) {
                        tvRet.setText(ret);
                    }

                    @Override
                    public void onError(@NonNull Throwable e) {
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

试验结果

  • 未重定向的地址返回结果

    • app成功返回html页面信息:

      尝试使用stetho拦截器配合Chrome调试网络请求_第1张图片

    • Chrome查看器观察结果:

      尝试使用stetho拦截器配合Chrome调试网络请求_第2张图片

返回码是200,正常,为GET请求,User-Agent为okhttp/3.9.1

  • 重定向的地址返回结果

    • app返回重定向规则:

      尝试使用stetho拦截器配合Chrome调试网络请求_第3张图片

    • Chrome查看器观察结果:

      尝试使用stetho拦截器配合Chrome调试网络请求_第4张图片

    返回码为302,地址重定向为Response Headers里Location对应的URL

    用途

    可以用于项目开发过程中的网络接口数据调试,有了以上的调试手段以后,可以进一步确定问题是在于服务端还是客户端,网络请求接口的调试就是一个近乎透明的过程。

    文章参考

    使用stetho+OkHttp+Chrome调试你的接口,非一般的感觉

你可能感兴趣的:(尝试使用stetho拦截器配合Chrome调试网络请求)