精华内容
下载资源
问答
  • okhttp公共参数拦截器

    2017-11-28 20:21:13
    网络请求中总有一些固定的参数 但是我们不能没回请求都加上 这就需要一个拦截器 添加公共参数 网络拦截器 @Override public Response intercept(Chain chain) throws IOException { //获取request Request...

    网络请求中总有一些固定的参数  但是我们不能没回请求都加上  这就需要一个拦截器  添加公共参数

    网络拦截器

    @Override
    public Response intercept(Chain chain) throws IOException {
        //获取request
        Request request = chain.request();
        //判断当前的请求
        if (request.method().equals("POST")){
            //判断当前的请求Boby
            if (request.body() instanceof FormBody){
                //创建一个新的FromBoby
                FormBody.Builder bobyBuilder = new FormBody.Builder();
                //获取原先的boby
                FormBody body = (FormBody) request.body();
                //遍历boby 
                for (int i = 0; i < body.size(); i++) {
                    //取出原先boby的数据  存入新的boby里
                    bobyBuilder.add(body.encodedName(i),body.encodedValue(i));
                }
                //添加制定的公共参数到新的boby里  把原先的boby给替换掉
                body=bobyBuilder.add("source","android").build();
                //获取新的request  取代原先的request
                request=request.newBuilder().post(body).build();
            }
        }
        //进行返回
        return chain.proceed(request);
    }

    在OkHttp中只需要实例化本拦截器  添加到 OkHttpClient 当中就行

    展开全文
  • How is it possible to append params to an OkHttp Request.builder?//requestRequest.Builder requestBuilder = new Request.Builder().url(url);I've managed the add header but not params.解决方案Here is a ...

    How is it possible to append params to an OkHttp Request.builder?

    //request

    Request.Builder requestBuilder = new Request.Builder()

    .url(url);

    I've managed the add header but not params.

    解决方案

    Here is a complete example on how to use okhttp to make post request (okhttp3).

    To send data as form body

    RequestBody formBody = new FormBody.Builder()

    .add("param_a", "value_a")

    .addEncoded("param_b", "value_b")

    .build();

    To send data as multipart body

    RequestBody multipartBody = new MultipartBody.Builder()

    .setType(MultipartBody.FORM)

    .addFormDataPart("fieldName", fileToUpload.getName(),RequestBody.create(MediaType.parse("application/octet-stream"), fileToUpload))

    .build();

    To send data as json body

    RequestBody jsonBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"),

    jsonObject.toString());

    Now create request

    Request request = new Request.Builder()

    .addHeader("header_a", "value_a") // to add header data

    .post(formBody) // for form data

    .post(jsonBody) // for json data

    .post(multipartBody) // for multipart data

    .build();

    Response response = client.newCall(request).execute();

    ** fileToUpload is a object of type java File

    ** client is a object of type OkHttpClient

    展开全文
  • 最近遇到的一个问题就是:所有请求接口都要增加一个token参数… 并且token参数有可能过期。 庆幸的是,Okhttp提供了强大的拦截器功能,是一种能够监控,重写,重试调用的强大机制 比如微信 APP登录 { "errcode...
    最近遇到的一个问题就是:所有请求接口都要增加一个token参数… 并且token参数有可能过期。

    庆幸的是,Okhttp提供了强大的拦截器功能,是一种能够监控,重写,重试调用的强大机制

    比如微信  APP登录   

    {
    "errcode":40029,"errmsg":"invalid code"
    }
    public class WXTokenInterceptord implements Interceptor {
    
         private final String TAG = "wx";
    
         @Override
         public Response intercept(Chain chain) throws IOException {
               Request request = chain.request()
                                    .newBuilder()
                                    .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
                                    .addHeader("Accept-Encoding", "gzip, deflate")
                                    .addHeader("Connection", "keep-alive")
                                    .addHeader("Accept", "*/*")
                                    .addHeader("Cookie", "add cookies here")
                                       .build();
            // 新的请求,添加参数
             Request newRequest = addParam(request );
    
             return chain.proceed(request);;
         }
     /**
          * 添加公共参数
          *
          * @param oldRequest
          * @return
          */
         private Request addParam(Request oldRequest) {
    
             HttpUrl.Builder builder = oldRequest.url()
                     .newBuilder()
                     .setEncodedQueryParameter("xx", "xxx");
    
             Request newRequest = oldRequest.newBuilder()
                     .method(oldRequest.method(), oldRequest.body())
                     .url(builder.build())
                     .build();
    
             return newRequest;
         }
     
         
     }

    然后为OkHttp配置一个拦截器。

     

     

    public static OkHttpClient getOkHttpClient() {
            Interceptor interceptor = new WXTokenInterceptord ();
            OkHttpClient client = new OkHttpClient.Builder()
                    .connectTimeout(30 * 1000, TimeUnit.MILLISECONDS)
                    .readTimeout(30 * 1000, TimeUnit.MILLISECONDS)
                    .addInterceptor(interceptor)
                    .addInterceptor(new HttpLoggingInterceptor(new MyLog()).setLevel(HttpLoggingInterceptor.Level.BODY))
                    .build();
            return client;
        }
     

     

    展开全文
  • okHttp请求公共参数

    千次阅读 2018-08-19 21:41:09
    othttp添加请求公共参数的几种方法 第一种 添加在请求链接尾部 HttpUrl url = original.url().newBuilder() //请求尾部链接 .addQueryParameter(VERSION, "") .addQueryParameter(APP_VERSION, &...

    othttp添加请求公共参数的几种方法

    第一种 添加在请求链接尾部
    HttpUrl url = original.url().newBuilder() //请求尾部链接
                        .addQueryParameter(VERSION, "")
                        .addQueryParameter(APP_VERSION, "")
                        .addQueryParameter(DEVICE, "")
                        .addQueryParameter(DEVICE_NAME, "android")
                        .addQueryParameter(DEVICE_IMEI, "")
                        .addQueryParameter(OS_VERSION, "")
                        .addQueryParameter(TOKEN, "")
                        .addQueryParameter(DEVICE_ID, "")
                        .build();
    
    Request request = original.newBuilder()
                    .method(original.method(), original.body())
                     //添加到请求里
                    .url(url)
                    .build();
    第二种 添加在请求form表单里

    最麻烦的一种,一般情况下不会用这种方法

    RequestBody formBody = new FormBody.Builder()//form表单
                    .add(DEVICE_ID, "")
                    .add(CHANNEL, "")
                    .add(DEVICE_SERIAL_ID, "")
                    .add(MOBILE_OS, "android")
                    .add(VERSION, "")
                    .add(MEMBER_ID, "")
                    .add(MEMBER_TYPE, "")
                    .add(TOKEN, "")
                    .build();
    
    //默认添加formBody后不能添加新的form表单,需要先将RequestBody转成string去拼接
    String postBodyString = bodyToString(original.body());
    postBodyString += ((postBodyString.length() > 0) ? "&" : "") + bodyToString(formBody);
    
    Request request = original.newBuilder()
                    .method(original.method(), original.body())
                     //添加到请求里
                     //string转回成RequestBody
                    .post(RequestBody.create(MediaType.parse("application/x-www-form-urlencoded"),
                            postBodyString))
                    .build();

    RequestBody转String的方法

    private static String bodyToString(final RequestBody request){
            try {
                final RequestBody copy = request;
                final Buffer buffer = new Buffer();
                if(copy != null)
                    copy.writeTo(buffer);
                else
                    return "";
                return buffer.readUtf8();
            }
            catch (final IOException e) {
                return "did not work";
            }
        }
    第三种 添加在请求head
    Request request = original.newBuilder()
                    .method(original.method(), original.body())
                    .addHeader(DEVICE_ID, "")
                    .addHeader(CHANNEL, "")
                    .addHeader(DEVICE_SERIAL_ID, "")
                    .addHeader(MOBILE_OS, "android")
                    .addHeader(VERSION, "")
                    .addHeader(MEMBER_ID, "")
                    .addHeader(TOKEN, "")
                    .addHeader(MEMBER_TYPE, "")
                    .build();
    展开全文
  • OKHTTP封装公共参数

    2017-12-20 13:30:11
    POST封装 public class MyInterceptor implements Interceptor {  @Override  public Response intercept(Chain chain) throws IOException {  Request orinal = chain.request();... FormBo
  • 当网络请求都是基于一个URL,所有的接口都是同一个地址,而请求不同...body发送,所以配置一些公共参数,如sessionId、timestamp等就有点麻烦,每个bean类都要加这些参数,或者写个基类BaseRequestBean,基类当中...
  • 安卓开发中,http 网络请求的框架有很多,有 HttpUrlConnection、 Volley 、 Okhttp很多种,现在由于 retrofit 和 rxjava 的出现, Okhttp 的使用越来越多,因为 Retrofit 也仅仅是在 Okhttp 做的一层封装,那么需求...
  • 想抓包那么抓网卡吧,打印请求或者添加公共参数或者签名之类的话,可以使用拦截器来添加。拦截器这里使用okhttp的应用拦截器,分别对get post添加统一参数和签名 首先实现 interceptor创建自己的拦截器public class
  • OkHttp中Interceptor拦截器之公共参数请求封装
  •  //要添加的公共参数...map  Map,String> map = new HashMap();  map.put("source","android");  StringBuilder stringBuilder = new StringBuilder();//创建一个stringBuilder  stringBuilder....
  • 相信我们在使用retrofit+okhttp+rxjava请求的时候,被这种模式真的惊呆了,好用的一批,但是某些情况下我们又无从下手,比如今天我自己记录的添加公共参数和加密请求,因为添加公共参数和加密不像使用okhttp那样在...
  • 公司项目有需求,需要对所有接口传参进行加密,比如接口传参为a=111,b...为此就通过okHttp的拦截器进行公共参数的添加。 override fun intercept(chain: Interceptor.Chain): Response { var request = chain.requ...
  • 我们在创建OkHttp客户端时,可以添加各种拦截器,真的很香: OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .addInterceptor(new XXXInterceptor()) ....
  • OkHttp3 拦截器 封装公共参数

    千次阅读 2018-01-13 17:19:32
    package com.dash.a02_okhttp3_02; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Environment; import android.util.Log; import android.widg
  • 一、前言 在前面,我们在讲拦截器的时候也讲到了拦截器的调用顺序,会优先调用自定义的拦截器,然后才会调用之后的几个拦截器。这里就不多说了,具体的... * 添加公共参数 * * @author freak * @date 2019/3/1...
  • if(method.equals("GET")){//添加参数 HttpUrl modifiedUrl = originalRequest.url().newBuilder() .addQueryParameter("channel", CHANNEL) .addQueryParameter("sign", sign) .build(); request = original...
  • OKhttp封装 拦截器

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,602
精华内容 1,040
关键字:

okhttp公共参数