Retrofit + OkHttp3做请求,在拦截器对body进行加密,抓包后发现加密后的body只发送了一半

CsdnNum 2019-12-13 08:08:25
是不是哪里出问题了?以下是拦截器的内容,我要在请求发出时对body进行加密,然后发现加密后只发出去一半?怎么回事?

Request request = chain.request();
//字符集
Charset charset = Charset.forName("UTF-8");

//不是Get和Delete请求时,则请求数据在请求体中
RequestBody requestBody = request.body();
//判断类型
MediaType contentType = requestBody.contentType();
if (contentType != null) {
charset = contentType.charset(charset);
/*如果是二进制上传 则不进行加密*/
if (contentType.type().toLowerCase().equals("multipart")) {
return chain.proceed(request);
}
}


// 获取请求的数据
Buffer buffer = new Buffer();
requestBody.writeTo(buffer);
String requestData = URLDecoder.decode(buffer.readString(charset).trim(), "utf-8");

//这里调用加密的方法,自行修改
byte[] bytes = new byte[0];
try {
bytes = RSAUtils.encryptData(requestData.getBytes(), RSAUtils.loadPublicKey(config.getPublicKey()));
} catch (Exception e) {
e.printStackTrace();
}
String encryptData = URLEncoder.encode(new String(bytes));
//构建新的请求体
RequestBody newRequestBody = RequestBody.create(contentType, encryptData);
//构建新的requestBuilder
Request.Builder newRequestBuilder = request.newBuilder();
//根据请求方式构建相应的请求
newRequestBuilder.post(newRequestBody);

request = newRequestBuilder.build();
return chain.proceed(request);
});

...全文
813 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuzhaowu_JAVA 2022-04-25
  • 打赏
  • 举报
回复

先要清空Content-Length,然后再添加赋值就行了,这是个坑

newRequestBuilder.removeHeader("Content-Length")

newRequestBuilder.addHeader(
"Content-Length",
encryptBodyStr.length.toString()
)

小菠萝123 2022-01-06
  • 打赏
  • 举报
回复

楼主找到解决方案了吗

yuzhaowu_JAVA 2022-04-25
  • 举报
回复
@小菠萝123 先要清空Content-Length,然后再添加赋值就行了,这是个坑 newRequestBuilder.removeHeader("Content-Length") newRequestBuilder.addHeader( "Content-Length", encryptBodyStr.length.toString() )

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧