Android用OKHttp进行数据请求时,统一给所有接口添加某个请求参数

本文介绍如何在OkHttp中为所有请求统一添加语言参数,避免在每个接口中单独设置。通过自定义拦截器实现请求参数的添加,并提供示例代码。

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

        作为Android端最主流的联网框架,OkHttp已经被很多人在很多项目中使用,可能大多数人都是会把OkHttp依赖加进去,然后初始化后再用retrofit来访问接口,但是在开发过程中,如果做对应语言消息返回的时候  比如手机是中文,服务端返回数据的提示就是中文,如果手机是英文,那么服务端返回数据的提示是英文,所以在这个地方,就需要在请求接口的时候,给服务端传递一个语言参数,然后服务端就会根据这个传过去的语言参数来返回不同语言的提示,好,我们现在要解决的就是传递语言参数的问题。

        我之前在不知道OkHttp可以统一添加请求参数的时候,我是给每个接口都传递了一个语言参数,其实吧这样的也可以,再其实吧,不传也可以,因为服务端都会设置一个默认的返回提示,或者默认英文,或者默认中文的,但是后来接手了一个项目,这个项目也需要传递语言参数,但是我一看我的前辈写的接口,大概一百多接口,都没加这个参数,但是新需求上又需要传递这个,我不可能一个一个接口的加吧,那么多,然后在百度上面找,就看到了OkHttp的这个,可以在初始化的时候给所有接口添加一个请求参数,下面是初始化OkHttp的代码,都通用的,就这个几句,但是要给接口添加参数是写注释这一句:

com.squareup.okhttp.OkHttpClient okHttpClient = new com.squareup.okhttp.OkHttpClient().setHostnameVerifier(new HostnameVerifier() {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        return false;
    }
}).setCache(new Cache(Util.getCacheDir(), 1 * 1024 * 1024))
        .setSslSocketFactory((SSLCertificateSocketFactory) SSLCertificateSocketFactory.getDefault(1000));
okHttpClient.interceptors().
add(new LoggingInterceptor());//这一句是给接口添加参数的,但是主要的还是new LoggingInterceptor()
RestAdapter mRestAdapter = new RestAdapter.Builder().setEndpoint(url).
        setConverter(new GsonConverter(gson)).setLogLevel(RestAdapter.LogLevel.FULL)
        .setLog(new RestAdapter.Log() {
            @Override
            public void log(String s) {
                
            }
        }).setClient(new OkClient(okHttpClient)).build();

上面写注释那一句就是添加一个方法,这个方法是我们自己写的:

public class LoggingInterceptor implements Interceptor {
    private final Charset UTF8 = Charset.forName("UTF-8");

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request oldRequest = chain.request();//定义一个Request 请求
        // 添加新的参数
        HttpUrl.Builder authorizedUrlBuilder = oldRequest.httpUrl().newBuilder().scheme(oldRequest.httpUrl().scheme())
                .host(oldRequest.httpUrl().host())
                .addQueryParameter("字段名字", "语言");//在这个请求里面添加一个请求参数

        // 新的请求
        Request newRequest = oldRequest.newBuilder()
                .method(oldRequest.method(), oldRequest.body())
                .url(authorizedUrlBuilder.build())
                .build();//再定义一个新的Request请求,再把添加了请求参数的请求放到新的请求里面来请求数据


        RequestBody requestBody = newRequest.body();

        String body = null;

        if (requestBody != null) {
            Buffer buffer = new Buffer();
            requestBody.writeTo(buffer);

            Charset charset = UTF8;
            MediaType contentType = requestBody.contentType();
            if (contentType != null) {
                charset = contentType.charset(UTF8);
            }
            body = buffer.readString(charset);
        }

        long startNs = System.nanoTime();
        Response response = chain.proceed(newRequest);
        long tookMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNs);

        ResponseBody responseBody = response.body();
        String rBody = null;


        return response;
    }


}

首先在这个方法里面,我们需要定义一个Request 请求,但是这个请求不是执行请求数据,而是在这个请求里面添加一个请求参数,然后再定义一个新的Request请求,再把添加了请求参数的请求放到新的请求里面来请求数据,这样所以通过这个方法请求的接口都会带一个你添加的参数。

注:这个方法是我自己百度到的,属于个人理解,说的不对的地方,欢迎大神指点。

### 关于DVWA靶场搭建过程中出现404错误的解决方案 在DVWA靶场搭建的过程中,如果遇到404错误,通常是因为服务器无法找到目标页面或资源。以下是可能的原因及其解决方法: #### 1. **检查文件路径** 确保DVWA解压后的文件夹已正确放置到PHPStudy的网页根目录下。对于PHPStudy,默认的网页根目录通常是`C:\phpstudy_pro\WWW`[^2]。确认DVWA文件夹名称是否与访问URL一致。例如,如果文件夹名为`DVWA-master`,则应通过`http://127.0.0.1/DVWA-master`访问。 #### 2. **验证Apache服务状态** 确保Apache服务已经成功启动。可以通过PHPStudy控制面板查看并启动Apache服务。如果服务未正常运行,则可能导致请求的目标页面不可达[^4]。 #### 3. **配置Apache虚拟主机** 有需要手动调整Apache的配置文件来支持自定义路径。打开`httpd.conf`文件(位于`C:\phpstudy_pro\Extensions\Apache\conf`),查找以下两行内容并取消注释: ```apache LoadModule rewrite_module modules/mod_rewrite.so <Directory "C:/phpstudy_pro/WWW"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All </Directory> ``` 保存更改后重启Apache服务[^4]。 #### 4. **检查权限设置** 确保DVWA所在的目录具有足够的读取和执行权限。可以在命令提示符中运行以下命令赋予相应权限: ```bash icacls C:\phpstudy_pro\WWW\DVWA-master /grant Everyone:F /T ``` #### 5. **浏览器缓存清理** 有候浏览器会因为缓存问题而返回旧的结果。尝试清除浏览器缓存或者更换不同的浏览器重新访问网站[^3]。 #### 6. **数据库初始化** 即使能够加载初始界面,但如果某些功能模块依赖的数据表尚未创建也可能引发类似的错误表现形式之一即表现为部分链接指向不存在的内容从而触发HTTP Status Code 404响应消息;因此建议按照官方文档指引完成必要的SQL脚本导入操作以便建立起完整的后台支撑结构体系[^1]。 --- ### 示例代码片段 当修改配置文件,请注意以下示例中的语法准确性: ```php <?php $_DVWA['db_server'] = '127.0.0.1'; $_DVWA['db_user'] = 'root'; $_DVWA['db_password'] = ''; // 如果设置了密码,请填写实际值 ?> ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值