Android 使用retrofit + okhttp + Rxjava2.x 做网络请求已成为趋势
我最近使用
Flowable<ApiResponse<Object>> getFacevalidety(@Part("ID") String ID, @Part("name") String name,
@Part MultipartBody.Part part)
做网络请求的时候发现一个很有意思的问题,
如:int ID = 10, 是一个int类型的值,然后把ID转换成String类型传到服务器,变成“10”,在外面添加一层引号;
如果我想把post请求的参数打印出来看过究竟;下面就是post请求查看请求参数的方法;
这个不管是FormBody,MultipartBody都可以获取到请求参数
if(body != null){
try {
Buffer buffer = new Buffer();
body.writeTo(buffer);
Charset charset = UTF8;
//请求参数值保存在requestbody中的charset
MediaType contentType = body.contentType();
if (contentType != null) {
charset = contentType.charset(UTF8);
}
if (isPlaintext(buffer)) {
//把charset 读到buffer中
LogUtil.e(TAG,buffer.readString(charset));
LogUtil.e(TAG,"--> END " + request.method()
+ " (" + body.contentLength() + "-byte body)");
} else {
LogUtil.e(TAG,"--> END " + request.method() + " (binary "
+ body.contentLength() + "-byte body omitted)");
}
} catch (IOException e) {
e.printStackTrace();
}
}
//单纯读取FormBody 中的key与value
if (request.body() instanceof FormBody) {
FormBody oldFormBody = (FormBody) request.body();
for (int i = 0; i < oldFormBody.size(); i++) {
sb.append(oldFormBody.encodedName(i) + "=key=value==" + oldFormBody.encodedValue(i));
}
}
static boolean isPlaintext(Buffer buffer) {
try {
Buffer prefix = new Buffer();
long byteCount = buffer.size() < 64 ? buffer.size() : 64;
buffer.copyTo(prefix, 0, byteCount);
for (int i = 0; i < 16; i++) {
if (prefix.exhausted()) {
break;
}
int codePoint = prefix.readUtf8CodePoint();
if (Character.isISOControl(codePoint) && !Character.isWhitespace(codePoint)) {
return false;
}
}
return true;
} catch (EOFException e) {
return false; // Truncated UTF-8 sequence.
}
}

本文介绍了一种在Android应用中使用Retrofit、OkHttp和RxJava2.x进行网络请求时的有效调试方法,尤其针对如何查看FormBody和MultipartBody的具体内容。

3182

被折叠的 条评论
为什么被折叠?



