使用Retrofit请求时需要多个baseurl切换

准备做小说APP的时候抓了挺多小说API,然后发现接口的域名有多个,各种查资料最后解决了多个域名请求的问题,现在记录一下

在这里插入图片描述
先在请求头添加okhttpclient拦截器,捕获添加的Headers,然后修改baseURL

 public class HttpHeaderInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        //  配置请求头
        Request request = chain.request();
        //从request中获取原有的HttpUrl实例oldHttpUrl
        HttpUrl oldHttpUrl = request.url();
        //获取request的创建者builder
        Request.Builder builder = request.newBuilder();
        //从request中获取headers,通过给定的键url_name
        List<String> headerValues = request.headers("urlname");
        if (headerValues != null && headerValues.size() > 0) {
            //如果有这个header,先将配置的header删除,因此header仅用作app和okhttp之间使用
            builder.removeHeader("urlname");
            //匹配获得新的BaseUrl
            String headerValue = headerValues.get(0);
            HttpUrl newBaseUrl = null;
            if ("test1".equals(headerValue)) {
                newBaseUrl = HttpUrl.parse(REQUEST_PATH);
            } else if ("test2".equals(headerValue)) {
                newBaseUrl = HttpUrl.parse(REQUEST_PATH_1);
            } else {
                newBaseUrl = oldHttpUrl;
            }
            //重建新的HttpUrl,修改需要修改的url部分
            HttpUrl newFullUrl = oldHttpUrl.newBuilder()
                    .scheme("http")//更换网络协议
                    .host(newBaseUrl.host())//更换主机名
                    .port(newBaseUrl.port())//更换端口
                    .build();
            //重建这个request,通过builder.url(newFullUrl).build();
            // 然后返回一个response至此结束修改
            Log.e("Url", "intercept: " + newFullUrl.toString());
            return chain.proceed(builder.url(newFullUrl).build());
        }
        return chain.proceed(request);
    }
}

第二步
在okhttpclient中设置
在这里插入图片描述

最后在service代码中添加@Headers():

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Retrofit是一个用于构建网络请求的开源库,通常用于Android开发。在某些情况下,我们需要访问不止一个基本URL来获取数据或访问不同的API。 对于这种情况,Retrofit提供了多种解决方案来支持多个base URL。以下是其中一种实现方式: 首先,我们需要为每个base URL创建一个单独的Retrofit实例。然后可以为每个实例分别设置自定义的OkHttpClient和Converter工厂。 在创建Retrofit实例,我们可以通过`Retrofit.Builder()`来设置各种属性,例如OkHttpClient、Converter工厂等。我们可以为每个base URL创建一个Retrofit实例,并为每个实例设置不同的配置。 接下来,我们需要为每个base URL创建一个对应的API接口。可以通过在不同的Retrofit实例上调用`create()`方法来创建这些API接口。每个base URL都对应着其相应的Retrofit实例,这样每个实例都会将请求发送到正确的base URL。 最后,我们就可以使用相应的API接口来发送请求和获取数据了。根据需要选择不同的API接口即可,每个接口对应着不同的base URL。 这样,通过创建多个Retrofit实例并为每个实例设置不同的base URL,我们就可以在一个应用中访问多个不同的API。 总结起来,retrofitbaseurl的实现方式是通过为每个base URL创建一个独立的Retrofit实例,并为每个实例设置不同的配置,然后使用相应的API接口来发送请求和获取数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值