自己封装okHttputil

package com.jkys.cis.promote.common.utils;

import okhttp3.Authenticator;
import okhttp3.*;

import java.io.File;
import java.io.IOException;
import java.net.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**

  • @author 方蝶
    */
    public class OkHttpUtil {

    public static final long DEFAULT_READ_TIMEOUT_MILLIS = 1 * 1000; //默认 读 超时时间
    public static final long DEFAULT_WRITE_TIMEOUT_MILLIS = 1 * 1000; //默认 写 超时时间
    public static final long DEFAULT_CONNECT_TIMEOUT_MILLIS = 1 * 1000; //默认 连接 超时时间

    private static OkHttpClient okHttpClient;
    private static OkHttpClient.Builder clientBuilder;

    /**

    • 执行一个GET请求
    • 返回失败返回null
      */
      public static String get(String url) throws IOException {
      return get(url, null);
      }

    public static String get(String url, Map<String, String> requestParameters) throws IOException {
    Response response = null;
    try {
    response = getOkHttpClient().newCall(getRequest(url, requestParameters)).execute();
    } catch (Throwable t) {
    t.printStackTrace();
    }
    return response.body().string();
    }

    public static Response getResponse(String url, Map<String, String> requestParameters) throws IOException {
    Response response = getOkHttpClient().newCall(getRequest(url, requestParameters)).execute();
    return response;
    }

    /**

    • 获取一个POST请求的call
    • @param url 请求的地址
    • @param requestParameters 请求参数
      */
      public static String post(String url, Map<String, String> requestParameters) throws IOException {
      return post(url, requestParameters, null);
      }

    /**

    • 获取一个POST请求的call
    • @param headers 带有请求头的post请求
      */
      public static String post(String url, Map<String, String> requestParameters, Map<String, String> headers) throws IOException {
      Response response = null;
      try {
      response = getOkHttpClient().newCall(postRequest(url, requestParameters, headers)).execute();
      } catch (Throwable t) {
      t.printStackTrace();
      }
      return response.body().string();
      }

    /**

    • 获取一个POST请求的call
      */
      public static Response postJson(String url, String jsonData) {
      return postJson(url, jsonData, null);
      }

    public static Response postJson(String url, String jsonData, Map<String, String> headers) {
    Response response = null;
    try {
    response = getOkHttpClient().newCall(postJsonRequest(url, jsonData, headers)).execute();
    } catch (Throwable t) {
    t.printStackTrace();
    }
    return response;
    }

    /**

    • 获取一个put请求的call
      */
      public static Response put(String url, Map<String, String> requestParameters) {
      Response response = null;
      try {
      response = getOkHttpClient().newCall(putRequest(url, requestParameters)).execute();
      } catch (Throwable t) {
      t.printStackTrace();
      }
      return response;
      }

    /**

    • 获取一个put请求的call
      */
      public static Response putJson(String url, String jsonData) {
      Response response = null;
      try {
      response = getOkHttpClient().newCall(putJsonRequest(url, jsonData)).execute();
      } catch (Throwable t) {
      t.printStackTrace();
      }
      return response;
      }

    /**

    • 获取一个GET类型的请求
    • @param url 请求的url
      */
      public static Request getRequest(String url, Map<String, String> headers) {
      Request.Builder builder = new Request.Builder();
      builder.url(url);
      builder.get();
      setHeaderAndUA(builder, headers);
      return builder.build();
      }

    /**

    • 获取一个POST的请求
    • @param url 请求的url
    • @param requestParameters 请求参数,Map类型
    • @param headers 添加请求头
      */
      public static Request postRequest(String url, Map<String, String> requestParameters, Map<String, String> headers) {
      Request.Builder builder = new Request.Builder();
      builder.url(url);
      builder.post(addParamToBuilder(requestParameters).build());
      setHeaderAndUA(builder, headers);
      return builder.build();
      }

    /**

    • 获取一个POST的请求
    • @param url 请求的url
    • @param jsonData 请求参数,Json类型
    • @param headers 请求头
      */
      public static Request postJsonRequest(String url, String jsonData, Map<String, String> headers) {
      Request.Builder builder = new Request.Builder();
      builder.url(url);
      //builder.addHeader(“content-type”, “application/json”);
      builder.post(RequestBody.create(MediaType.parse(“application/json”), jsonData));
      setHeaderAndUA(builder, headers);
      return builder.build();
      }

    /**

    • 上传文件
    • @param url 上传的路径
    • @param fileName 上传的文件名
    • @param filePath 上传的文件路径
      */
      public static Response postMedia(String url, String fileName, String filePath, String param) {
      Response response = null;
      try {
      response = getOkHttpClient().newCall(postMediaRequest(url, fileName, filePath, param)).execute();
      } catch (Throwable t) {
      t.printStackTrace();
      }
      return response;
      }

    /**

    • 生成文件类型的request

    • @param url 上传的路径

    • @param fileName 上传的文件名

    • @param filePath 上传的文件路径

    • @param param 上传的参数
      */
      public static Request postMediaRequest(String url, String fileName, String filePath, String param) {

      MultipartBody.Builder multipartBuilder = new MultipartBody.Builder();
      File file = new File(filePath);
      RequestBody bodyFile = RequestBody.create(MediaType.parse(“application/octet-stream”), file);

      RequestBody requestBody = multipartBuilder
      .setType(MultipartBody.FORM)
      .addFormDataPart(param, fileName, bodyFile)
      .build();

      Request.Builder builder = new Request.Builder();
      builder.url(url);
      builder.post(requestBody);
      return builder.build();
      }

    /**

    • 获取一个PUT的请求
    • @param url 请求的url
    • @param requestParameters 请求参数,Map类型
      */
      public static Request putRequest(String url, Map<String, String> requestParameters) {
      return new Request.Builder()
      .url(url)
      .put(addParamToBuilder(requestParameters).build())
      .build();
      }

    /**

    • 获取一个PUT的请求
    • @param url 请求的url
    • @param jsonData 请求参数,String类型
      */
      public static Request putJsonRequest(String url, String jsonData) {
      return new Request.Builder()
      .url(url)
      .addHeader(“content-type”, “application/json;charset:utf-8”)
      .put(RequestBody.create(MediaType.parse(“application/json;charset:utf-8”), jsonData))
      .build();
      }

    /**

    • 获取一个OkHttpClient
      */
      public static OkHttpClient getOkHttpClient() {
      return getOkHttpClient(null);
      }

    public static OkHttpClient getOkHttpClient(Map<String, String> cookies) {
    if (okHttpClient == null) {
    okHttpClient = getClientBuilder(cookies).build();
    }
    return okHttpClient;
    }

    /**

    • 获取client的builder

    • @param cookies 要转入的cookies
      */
      public static OkHttpClient.Builder getClientBuilder(Map<String, String> cookies) {
      if (clientBuilder == null) {
      clientBuilder = new OkHttpClient.Builder();
      clientBuilder.connectTimeout(DEFAULT_CONNECT_TIMEOUT_MILLIS, TimeUnit.SECONDS)
      .writeTimeout(DEFAULT_WRITE_TIMEOUT_MILLIS, TimeUnit.SECONDS)
      .readTimeout(DEFAULT_READ_TIMEOUT_MILLIS, TimeUnit.SECONDS);
      if (cookies != null) {
      clientBuilder.cookieJar(setCookie(cookies));
      }
      clientBuilder.proxyAuthenticator(new Authenticator() {
      @Override
      public Request authenticate(Route route, Response response) throws IOException {
      if (response.request().header(“Proxy-Authorization”) != null) {
      // Give up, we’ve already failed to authenticate.
      return null;
      }

               String credential = Credentials.basic("t17067798237321", "8pp6r64r");
               return response.request().newBuilder()
                       .header("Proxy-Authorization", credential)
                       .build();
           }
       });
      
      
       clientBuilder.proxySelector(new ProxySelector() {
           @Override
           public List<Proxy> select(URI uri) {
               List<Proxy> proxyList = new ArrayList<Proxy>();
               final String host = uri.getHost();
               if (host.startsWith("127.0.0.1")) {
                   proxyList.add(Proxy.NO_PROXY);
               } else {
                   // Add proxy
                   proxyList.add(new Proxy(Proxy.Type.HTTP,
                           new InetSocketAddress("tps168.kdlapi.com", 15818)));
               }
               return null;           //原来return ProxyFFF.proxyList;   //这里的代理ip池 是一个list , 其他实现向其中加数据
           }
      
           @Override
           public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
               //连接错误,重新获取
               //ProxyFFF.add();
               throw new RuntimeException();
           }
       });
       //builder.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ProxyIp.getIp()[0],Integer.valueOf(ProxyIp.getIp()[1]))));
      

      }

      return clientBuilder;
      }

    /**

    • 将Map转换为OKHttp需要的FormBody
    • @param requestParamMap 需要的请求参数 ,Map类型
      */
      private static FormBody.Builder addParamToBuilder(Map<String, String> requestParamMap) {
      FormBody.Builder formBody = new FormBody.Builder();
      if (requestParamMap != null) {
      for (Map.Entry<String, String> entry : requestParamMap.entrySet()) {
      if (entry != null) {
      String key = entry.getKey();
      String value = entry.getValue();
      if (key != null && value != null) {
      formBody.add(key, value);
      }
      }
      }
      }
      return formBody;
      }

    /**

    • 将map转换为okhttp3需要的header
      */
      private static Headers setHeaders(Map<String, String> headersParams) {
      Headers.Builder builder = new Headers.Builder();
      if (headersParams != null) {
      for (Map.Entry<String, String> entry : headersParams.entrySet()) {
      if (entry != null) {
      builder.add(entry.getKey(), entry.getValue());
      }
      }
      }
      return builder.build();
      }

    /**

    • 管理cookie
      */
      private static CookieJar setCookie(Map<String, String> cookies) {
      final List list = new ArrayList();
      for (Map.Entry<String, String> entry : cookies.entrySet()) {
      list.add(new Cookie.Builder().name(entry.getKey()).value(entry.getValue()).domain("").build());
      }
      return new CookieJar() {

       @Override
       public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
      
       }
      
       @Override
       public List<Cookie> loadForRequest(HttpUrl url) {
           return list;
       }
      

      };
      }

    public static boolean isUseUA = false; //是否使用UA,这里实现的不好,网络请求工具和爬虫配置耦合

    /**

    • 设置请求头和UA
      */
      private static void setHeaderAndUA(Request.Builder builder, Map<String, String> header) {

      if (header != null) {

       builder.headers(setHeaders(header));
      

      }

    }

    /**

    • 关闭response,防止内存泄漏
      */
      private static void closeResponse(Response response) {
      if (response != null) {
      response.close();
      }
      }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值