Retrofit:在urlEncode之前将所有参数转换为加密String

时间:2017-03-01 03:25:56

标签: android retrofit okhttp

最近,我有一个问题。我正在使用Retrofit + okhttp来做网络。但是现在我必须加密所有参数,因为我在参数中有中文,它会在拦截器之前进行编码,所以对于那些api,我必须做一些特殊的事情。我认为这不是一个好主意。那么在编码参数之前是否有任何加密参数的解决方案?

2 个答案:

答案 0 :(得分:0)

我已经通过创建一个新的Call来解决我的问题,以替换下面的原始。希望能帮助像我这样的人。

final OkHttpClient okHttpClient = CustomHeaderOkHttpClient.newInstance()
                .newBuilder()
                .build();
        Retrofit retrofit = RetrofitUtils.createGsonRxJavaRetrofitBuilder()
                .client(okHttpClient)
                .callFactory(new Call.Factory() {
                    @Override
                    public Call newCall(Request request) {
                        Request encryptRequest = EncryptCallHelper.encryptRequest(request);
                        return okHttpClient.newCall(encryptRequest);
                    }
                })
                .baseUrl(sBaseUrl)
                .build();

答案 1 :(得分:0)

CustomHeaderOkHttpClient只是OkHttp的一个实例,就像打击一样。

public class CustomHeaderOkHttpClient {

    public static OkHttpClient.Builder newBaseBuilder(Context context) {
        return new OkHttpClient.Builder()
                .connectTimeout(15, TimeUnit.SECONDS)
                .readTimeout(15, TimeUnit.SECONDS)
                .writeTimeout(15, TimeUnit.SECONDS)
                .cookieJar(new WebViewCookieJar())
               ;
    }
}

EncryptCallHelper我不能粘贴在这里,我很抱歉。内容的工作原理如下:

  1. 获取请求的所有参数
  2. 以您自己的方式加密您的参数
  3. 返回新的Call to Retrofit