OKhttp拦截器完善上传图片

这个博客介绍了如何在Okhttp中创建一个拦截器MyInterceptor,以便在进行GET或POST请求时,动态添加参数。对于GET请求,它会在URL中添加参数;对于POST请求,如果请求体是FormBody类型,会将新参数添加到已有的参数中,从而实现上传图片时完善请求信息的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.example.jingdong.net;

import java.io.IOException;

import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class MyInterceptor implements Interceptor {

    private Response response;

    @Override
    public Response intercept(Chain chain) throws IOException {
        //1、获取用户使用的请求方式
        //1.1获取原始的请求
        Request orginalRequest = chain.request();
        //1.2获取请求方式
        if ("GET".equals(orginalRequest.method())) {
            //GET请求
            //获取原始的请求地址,然后添加参数,生成最终的请求地址
            HttpUrl url = orginalRequest.url()
                    .newBuilder()
                    .addQueryParameter("source", "android")//添加参数
                    .build();
            Request request = orginalRequest.newBuilder().url(url).build();
            //发送拼接好参数的请求
            response = chain.proceed(request);

        } else if ("POST".equals(orginalRequest.method())) {

            //获取原始的请求体里的参数
            RequestBody body1 = orginalRequest.body();

            if (body1 instanceof FormBody){
                //POST请求
                FormBody.Builder builder = new FormBody.Builder();
                FormBody formBody= (FormBody) orginalRequest.body();
                //遍历原始的请求体里的参数
                for (int i = 0; i < formBody.size(); i++) {
                    builder.add(formBody.name(i), formBody.value(i));
                }
                //添加新参数
                builder.add("source", "android");
                FormBody body = builder.build();
                //添加请求的参数
                Request request = orginalRequest.newBuilder()
                        .url(orginalRequest.url())
                        .post(body)
                        .build();
                response = chain.proceed(request);
            }else {
                response = chain.proceed(orginalRequest);
            }

        }
        return response;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值