okhttp的使用方法 http, https

okhttp的项目主页https://github.com/square/okhttp 介绍页 http://square.github.io/okhttp/

使用方法以maven为例:

       
          com.squareup.okhttp3
          okhttp
          3.4.1
        

注意:okhttp3.4.1需要jdk1.7以上版本

HttpUtil.java

package com.leegtang.demo.util;

import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class HttpUtil {
    public static final MediaType JSON = MediaType
            .parse("application/json; charset=utf-8&ququot;);

    static OkHttpClient client ;
     
    
    static HostnameVerifier DO\_NOT\_VERIFY = new HostnameVerifier() { 
        @Override
        public boolean verify(String hostname, SSLSession session) { 
            return true;
        }
     };
      
     private static SSLSocketFactory createSSLSocketFactory() {

         SSLSocketFactory sSLSocketFactory = null;

         try {
             SSLContext sc = SSLContext.getInstance("TLS");
             sc.init(null, new TrustManager\[\]{new TrustAllManager()},
                     new SecureRandom());
             sSLSocketFactory = sc.getSocketFactory();
         } catch (Exception e) {
         }

         return sSLSocketFactory;
     }

     private static class TrustAllManager implements X509TrustManager {
         @Override
         public void checkClientTrusted(X509Certificate\[\] chain, String authType)
                 throws CertificateException {
         }

         @Override
         public void checkServerTrusted(X509Certificate\[\] chain, String authType)

                 throws CertificateException {
         }

         @Override
         public X509Certificate\[\] getAcceptedIssuers() {
             return new X509Certificate\[0\];
         }
     }
     
    public static String post(String url, String json) {  
        if(url.startsWith("https")){ 
//          client = new OkHttpClient.Builder().sslSocketFactory(createSSLSocketFactory()).hostnameVerifier(DO_NOT_VERIFY)
//                  .build(); 
            
            client = new OkHttpClient.Builder()
                    .sslSocketFactory(createSSLSocketFactory(),new TrustAllManager())
                    .hostnameVerifier(DO\_NOT\_VERIFY)
                    .build(); 
        }else{
            client = new OkHttpClient.Builder().build();
        }
        
        try {  
            RequestBody body=null;
            if(json.startsWith("{")){
                    body= RequestBody.create(JSON, json);
            }else{
                    MediaType text=MediaType.parse("application/x-www-form-urlencoded");
                    body= RequestBody.create(text, json);
            } 
            
            Request request = new Request.Builder().url(url).post(body).build();
            Response response = client.newCall(request).execute();
            return response.body().string();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
    public static String get(String url, String json) {  
        if(url.startsWith("https")){ 
            client = new OkHttpClient.Builder()
                    .sslSocketFactory(createSSLSocketFactory(),new TrustAllManager())
                    .hostnameVerifier(DO_NOT_VERIFY)
                    .build(); 
        }else{
            client = new OkHttpClient.Builder().build();
        }
        
        try {   
            Request request = new Request.Builder().url(url).build();
            Response response = client.newCall(request).execute();
            return response.body().string();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
     

    
    
    
    
    public static void main(String\[\] args) {
        String url="https://www.yf2017.top";
        String json=String.format("{"loginName":"%s","pwd":"%s","serviceName":"%s","
                + ""param":{"idCard":"%s","name":"%s"}"
                + "}","test", "123456", "IDNameCheck", "320743199101175520", "李丙付");
        
        String res=post(url, json);
        System.out.println(res);
    }
}

  

okhttp header

String data="_ctype_=json"; 
RequestBody body=  RequestBody.create(MediaType.parse("application/json; charset=utf-8"), data);
Request request = new Request.Builder()
     .url("http://www.yf2017.top/test.do?"+data)
     .header("Accept", "application/json, text/javascript, */*; q=0.01")
//      .addHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8")
     .post(body)
     .build();
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new LoggingInterceptor()).build();
try {
Response response = client.newCall(request).execute();
Stringres=response.body().string();
System.out.println(res);
} catch (Exception e) {
e.printStackTrace();
}

如果传入json数据,则方在RequestBody里,如果只是字符串,可以放到url后面拼接。

okhttp日志输出

package com.lcg.demo.util;

import java.io.IOException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

class LoggingInterceptor implements Interceptor {
 Logger logger =LoggerFactory.getLogger(this.getClass());
 @Override public Response intercept(Interceptor.Chain chain) throws IOException {
   Request request = chain.request();

   long t1 = System.nanoTime();
   logger.info(String.format("Sending request %s on %s%n%s",
       request.url(), chain.connection(), request.headers()));

   Response response = chain.proceed(request);

   long t2 = System.nanoTime();
   logger.info(String.format("Received response for %s in %.1fms%n%s",
       response.request().url(), (t2 - t1) / 1e6d, response.headers()));

   return response;
 }
}

  

OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new LoggingInterceptor()).build();

增加logback的相关配置,可以参考

如何从log4j转到logback

(全文完)

0%