• Https工具类


    package com.utils;

    import java.io.IOException;
    import java.security.KeyManagementException;
    import java.security.NoSuchAlgorithmException;
    import java.security.cert.X509Certificate;

    import javax.net.ssl.SSLContext;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;

    import org.apache.http.HttpEntity;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.config.RequestConfig;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.config.Registry;
    import org.apache.http.config.RegistryBuilder;
    import org.apache.http.conn.socket.ConnectionSocketFactory;
    import org.apache.http.conn.socket.PlainConnectionSocketFactory;
    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
    import org.apache.http.util.EntityUtils;

    public class httpsApi {

    private static RequestConfig requestConfig = RequestConfig.custom()
    .setSocketTimeout(100000).setConnectTimeout(15000)
    .setConnectionRequestTimeout(15000).build();
    /**
    * Https请求处理
    * @param httpPost
    * @param isHttps
    * @return
    */
    private static String sendHttpPost(HttpPost httpPost,boolean isHttps) {
    CloseableHttpClient httpClient = null;
    CloseableHttpResponse response = null;
    HttpEntity entity = null;
    String responseContent = null;
    httpClient=(CloseableHttpClient)getHttpClient(isHttps);
    httpPost.setConfig(requestConfig);
    // 执行请求
    try {
    response = httpClient.execute(httpPost);
    entity = response.getEntity();
    LogHelper.info("调用获取用户信息接口返回:"+ entity.toString());
    responseContent = EntityUtils.toString(entity, "UTF-8");
    } catch (ClientProtocolException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }finally {
    try {
    // 关闭连接,释放资源
    if (response != null) {
    response.close();
    }
    if (httpClient != null) {
    httpClient.close();
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    return responseContent;
    }


    /**
    * HttpClient创建,根据情况创建请求方式
    * @param isHttps
    * @return
    */
    private static HttpClient getHttpClient(boolean isHttps) {
    if (isHttps) {
    SSLContext sslContext = createIgnoreVerifySSL();
    Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create()
    .register("http", PlainConnectionSocketFactory.INSTANCE)
    .register("https", new SSLConnectionSocketFactory(sslContext)).build();
    PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(
    socketFactoryRegistry);
    return HttpClients.custom().setConnectionManager(connManager).build();
    } else {
    return HttpClients.createDefault();
    }
    }


    /**
    * HTTPS请求证书处理
    *
    * @return
    * @throws NoSuchAlgorithmException
    * @throws KeyManagementException
    */
    private static SSLContext createIgnoreVerifySSL() {
    try {
    SSLContext sc = SSLContext.getInstance("SSL");
    X509TrustManager trustManager = new X509TrustManager() {
    @Override
    public void checkClientTrusted(X509Certificate[] x509Certificates, String paramString) {
    }

    @Override
    public void checkServerTrusted(X509Certificate[] x509Certificates, String paramString) {
    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
    return null;
    }
    };
    sc.init(null, new TrustManager[] { trustManager }, null);
    return sc;
    } catch (KeyManagementException e) {
    throw new RuntimeException(e);
    } catch (NoSuchAlgorithmException e) {
    throw new RuntimeException(e);
    }
    }


    }

    1 import java.io.FileOutputStream;  
      2 import java.io.IOException;  
      3 import java.io.InputStream;  
      4 import java.io.InputStreamReader;  
      5 import java.io.OutputStreamWriter;  
      6 import java.io.UnsupportedEncodingException;  
      7 import java.net.HttpURLConnection;  
      8 import java.net.Socket;  
      9 import java.net.URL;  
     10 import java.net.URLConnection;  
     11 import java.net.URLEncoder;  
     12 import java.util.ArrayList;  
     13 import java.util.HashMap;  
     14 import java.util.Iterator;  
     15 import java.util.List;  
     16 import java.util.Map;  
     17 import java.util.Map.Entry;  
     18   
     19 import org.apache.http.HttpResponse;  
     20 import org.apache.http.NameValuePair;  
     21 import org.apache.http.client.HttpClient;  
     22 import org.apache.http.client.entity.UrlEncodedFormEntity;  
     23 import org.apache.http.client.methods.HttpGet;  
     24 import org.apache.http.client.methods.HttpPost;  
     25 import org.apache.http.impl.client.DefaultHttpClient;  
     26 import org.apache.http.message.BasicNameValuePair;  
     27   
     28 /** 
     29  * @Description:发送http请求帮助类 
     30  * @author:liuyc 
     31  * @time:2016年5月17日 下午3:25:32 
     32  */  
     33 public class HttpClientHelper {  
     34     /** 
     35      * @Description:使用HttpURLConnection发送post请求 
     36      * @author:liuyc 
     37      * @time:2016年5月17日 下午3:26:07 
     38      */  
     39     public static String sendPost(String urlParam, Map<String, Object> params, String charset) {  
     40         StringBuffer resultBuffer = null;  
     41         // 构建请求参数  
     42         StringBuffer sbParams = new StringBuffer();  
     43         if (params != null && params.size() > 0) {  
     44             for (Entry<String, Object> e : params.entrySet()) {  
     45                 sbParams.append(e.getKey());  
     46                 sbParams.append("=");  
     47                 sbParams.append(e.getValue());  
     48                 sbParams.append("&");  
     49             }  
     50         }  
     51         HttpURLConnection con = null;  
     52         OutputStreamWriter osw = null;  
     53         BufferedReader br = null;  
     54         // 发送请求  
     55         try {  
     56             URL url = new URL(urlParam);  
     57             con = (HttpURLConnection) url.openConnection();  
     58             con.setRequestMethod("POST");  
     59             con.setDoOutput(true);  
     60             con.setDoInput(true);  
     61             con.setUseCaches(false);  
     62             con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  
     63             if (sbParams != null && sbParams.length() > 0) {  
     64                 osw = new OutputStreamWriter(con.getOutputStream(), charset);  
     65                 osw.write(sbParams.substring(0, sbParams.length() - 1));  
     66                 osw.flush();  
     67             }  
     68             // 读取返回内容  
     69             resultBuffer = new StringBuffer();  
     70             int contentLength = Integer.parseInt(con.getHeaderField("Content-Length"));  
     71             if (contentLength > 0) {  
     72                 br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));  
     73                 String temp;  
     74                 while ((temp = br.readLine()) != null) {  
     75                     resultBuffer.append(temp);  
     76                 }  
     77             }  
     78         } catch (Exception e) {  
     79             throw new RuntimeException(e);  
     80         } finally {  
     81             if (osw != null) {  
     82                 try {  
     83                     osw.close();  
     84                 } catch (IOException e) {  
     85                     osw = null;  
     86                     throw new RuntimeException(e);  
     87                 } finally {  
     88                     if (con != null) {  
     89                         con.disconnect();  
     90                         con = null;  
     91                     }  
     92                 }  
     93             }  
     94             if (br != null) {  
     95                 try {  
     96                     br.close();  
     97                 } catch (IOException e) {  
     98                     br = null;  
     99                     throw new RuntimeException(e);  
    100                 } finally {  
    101                     if (con != null) {  
    102                         con.disconnect();  
    103                         con = null;  
    104                     }  
    105                 }  
    106             }  
    107         }  
    108   
    109         return resultBuffer.toString();  
    110     }  
    111   
    112     /** 
    113      * @Description:使用URLConnection发送post 
    114      * @author:liuyc 
    115      * @time:2016年5月17日 下午3:26:52 
    116      */  
    117     public static String sendPost2(String urlParam, Map<String, Object> params, String charset) {  
    118         StringBuffer resultBuffer = null;  
    119         // 构建请求参数  
    120         StringBuffer sbParams = new StringBuffer();  
    121         if (params != null && params.size() > 0) {  
    122             for (Entry<String, Object> e : params.entrySet()) {  
    123                 sbParams.append(e.getKey());  
    124                 sbParams.append("=");  
    125                 sbParams.append(e.getValue());  
    126                 sbParams.append("&");  
    127             }  
    128         }  
    129         URLConnection con = null;  
    130         OutputStreamWriter osw = null;  
    131         BufferedReader br = null;  
    132         try {  
    133             URL realUrl = new URL(urlParam);  
    134             // 打开和URL之间的连接  
    135             con = realUrl.openConnection();  
    136             // 设置通用的请求属性  
    137             con.setRequestProperty("accept", "*/*");  
    138             con.setRequestProperty("connection", "Keep-Alive");  
    139             con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  
    140             con.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");  
    141             // 发送POST请求必须设置如下两行  
    142             con.setDoOutput(true);  
    143             con.setDoInput(true);  
    144             // 获取URLConnection对象对应的输出流  
    145             osw = new OutputStreamWriter(con.getOutputStream(), charset);  
    146             if (sbParams != null && sbParams.length() > 0) {  
    147                 // 发送请求参数  
    148                 osw.write(sbParams.substring(0, sbParams.length() - 1));  
    149                 // flush输出流的缓冲  
    150                 osw.flush();  
    151             }  
    152             // 定义BufferedReader输入流来读取URL的响应  
    153             resultBuffer = new StringBuffer();  
    154             int contentLength = Integer.parseInt(con.getHeaderField("Content-Length"));  
    155             if (contentLength > 0) {  
    156                 br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));  
    157                 String temp;  
    158                 while ((temp = br.readLine()) != null) {  
    159                     resultBuffer.append(temp);  
    160                 }  
    161             }  
    162         } catch (Exception e) {  
    163             throw new RuntimeException(e);  
    164         } finally {  
    165             if (osw != null) {  
    166                 try {  
    167                     osw.close();  
    168                 } catch (IOException e) {  
    169                     osw = null;  
    170                     throw new RuntimeException(e);  
    171                 }  
    172             }  
    173             if (br != null) {  
    174                 try {  
    175                     br.close();  
    176                 } catch (IOException e) {  
    177                     br = null;  
    178                     throw new RuntimeException(e);  
    179                 }  
    180             }  
    181         }  
    182         return resultBuffer.toString();  
    183     }  
    184   
    185     /**  
    186      * @Description:发送get请求保存下载文件  
    187      * @author:liuyc  
    188      * @time:2016年5月17日 下午3:27:29  
    189      */  
    190     public static void sendGetAndSaveFile(String urlParam, Map<String, Object> params, String fileSavePath) {  
    191         // 构建请求参数  
    192         StringBuffer sbParams = new StringBuffer();  
    193         if (params != null && params.size() > 0) {  
    194             for (Entry<String, Object> entry : params.entrySet()) {  
    195                 sbParams.append(entry.getKey());  
    196                 sbParams.append("=");  
    197                 sbParams.append(entry.getValue());  
    198                 sbParams.append("&");  
    199             }  
    200         }  
    201         HttpURLConnection con = null;  
    202         BufferedReader br = null;  
    203         FileOutputStream os = null;  
    204         try {  
    205             URL url = null;  
    206             if (sbParams != null && sbParams.length() > 0) {  
    207                 url = new URL(urlParam + "?" + sbParams.substring(0, sbParams.length() - 1));  
    208             } else {  
    209                 url = new URL(urlParam);  
    210             }  
    211             con = (HttpURLConnection) url.openConnection();  
    212             con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  
    213             con.connect();  
    214             InputStream is = con.getInputStream();  
    215             os = new FileOutputStream(fileSavePath);  
    216             byte buf[] = new byte[1024];  
    217             int count = 0;  
    218             while ((count = is.read(buf)) != -1) {  
    219                 os.write(buf, 0, count);  
    220             }  
    221             os.flush();  
    222         } catch (Exception e) {  
    223             throw new RuntimeException(e);  
    224         } finally {  
    225             if (os != null) {  
    226                 try {  
    227                     os.close();  
    228                 } catch (IOException e) {  
    229                     os = null;  
    230                     throw new RuntimeException(e);  
    231                 } finally {  
    232                     if (con != null) {  
    233                         con.disconnect();  
    234                         con = null;  
    235                     }  
    236                 }  
    237             }  
    238             if (br != null) {  
    239                 try {  
    240                     br.close();  
    241                 } catch (IOException e) {  
    242                     br = null;  
    243                     throw new RuntimeException(e);  
    244                 } finally {  
    245                     if (con != null) {  
    246                         con.disconnect();  
    247                         con = null;  
    248                     }  
    249                 }  
    250             }  
    251         }  
    252     }  
    253   
    254     /** 
    255      * @Description:使用HttpURLConnection发送get请求 
    256      * @author:liuyc 
    257      * @time:2016年5月17日 下午3:27:29 
    258      */  
    259     public static String sendGet(String urlParam, Map<String, Object> params, String charset) {  
    260         StringBuffer resultBuffer = null;  
    261         // 构建请求参数  
    262         StringBuffer sbParams = new StringBuffer();  
    263         if (params != null && params.size() > 0) {  
    264             for (Entry<String, Object> entry : params.entrySet()) {  
    265                 sbParams.append(entry.getKey());  
    266                 sbParams.append("=");  
    267                 sbParams.append(entry.getValue());  
    268                 sbParams.append("&");  
    269             }  
    270         }  
    271         HttpURLConnection con = null;  
    272         BufferedReader br = null;  
    273         try {  
    274             URL url = null;  
    275             if (sbParams != null && sbParams.length() > 0) {  
    276                 url = new URL(urlParam + "?" + sbParams.substring(0, sbParams.length() - 1));  
    277             } else {  
    278                 url = new URL(urlParam);  
    279             }  
    280             con = (HttpURLConnection) url.openConnection();  
    281             con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  
    282             con.connect();  
    283             resultBuffer = new StringBuffer();  
    284             br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));  
    285             String temp;  
    286             while ((temp = br.readLine()) != null) {  
    287                 resultBuffer.append(temp);  
    288             }  
    289         } catch (Exception e) {  
    290             throw new RuntimeException(e);  
    291         } finally {  
    292             if (br != null) {  
    293                 try {  
    294                     br.close();  
    295                 } catch (IOException e) {  
    296                     br = null;  
    297                     throw new RuntimeException(e);  
    298                 } finally {  
    299                     if (con != null) {  
    300                         con.disconnect();  
    301                         con = null;  
    302                     }  
    303                 }  
    304             }  
    305         }  
    306         return resultBuffer.toString();  
    307     }  
    308   
    309     /** 
    310      * @Description:使用URLConnection发送get请求 
    311      * @author:liuyc 
    312      * @time:2016年5月17日 下午3:27:58 
    313      */  
    314     public static String sendGet2(String urlParam, Map<String, Object> params, String charset) {  
    315         StringBuffer resultBuffer = null;  
    316         // 构建请求参数  
    317         StringBuffer sbParams = new StringBuffer();  
    318         if (params != null && params.size() > 0) {  
    319             for (Entry<String, Object> entry : params.entrySet()) {  
    320                 sbParams.append(entry.getKey());  
    321                 sbParams.append("=");  
    322                 sbParams.append(entry.getValue());  
    323                 sbParams.append("&");  
    324             }  
    325         }  
    326         BufferedReader br = null;  
    327         try {  
    328             URL url = null;  
    329             if (sbParams != null && sbParams.length() > 0) {  
    330                 url = new URL(urlParam + "?" + sbParams.substring(0, sbParams.length() - 1));  
    331             } else {  
    332                 url = new URL(urlParam);  
    333             }  
    334             URLConnection con = url.openConnection();  
    335             // 设置请求属性  
    336             con.setRequestProperty("accept", "*/*");  
    337             con.setRequestProperty("connection", "Keep-Alive");  
    338             con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  
    339             con.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");  
    340             // 建立连接  
    341             con.connect();  
    342             resultBuffer = new StringBuffer();  
    343             br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));  
    344             String temp;  
    345             while ((temp = br.readLine()) != null) {  
    346                 resultBuffer.append(temp);  
    347             }  
    348         } catch (Exception e) {  
    349             throw new RuntimeException(e);  
    350         } finally {  
    351             if (br != null) {  
    352                 try {  
    353                     br.close();  
    354                 } catch (IOException e) {  
    355                     br = null;  
    356                     throw new RuntimeException(e);  
    357                 }  
    358             }  
    359         }  
    360         return resultBuffer.toString();  
    361     }  
    362   
    363     /**  
    364      * @Description:使用HttpClient发送post请求  
    365      * @author:liuyc  
    366      * @time:2016年5月17日 下午3:28:23  
    367      */  
    368     public static String httpClientPost(String urlParam, Map<String, Object> params, String charset) {  
    369         StringBuffer resultBuffer = null;  
    370         HttpClient client = new DefaultHttpClient();  
    371         HttpPost httpPost = new HttpPost(urlParam);  
    372         // 构建请求参数  
    373         List<NameValuePair> list = new ArrayList<NameValuePair>();  
    374         Iterator<Entry<String, Object>> iterator = params.entrySet().iterator();  
    375         while (iterator.hasNext()) {  
    376             Entry<String, Object> elem = iterator.next();  
    377             list.add(new BasicNameValuePair(elem.getKey(), String.valueOf(elem.getValue())));  
    378         }  
    379         BufferedReader br = null;  
    380         try {  
    381             if (list.size() > 0) {  
    382                 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, charset);  
    383                 httpPost.setEntity(entity);  
    384             }  
    385             HttpResponse response = client.execute(httpPost);  
    386             // 读取服务器响应数据  
    387             resultBuffer = new StringBuffer();  
    388             br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));  
    389             String temp;  
    390             while ((temp = br.readLine()) != null) {  
    391                 resultBuffer.append(temp);  
    392             }  
    393         } catch (Exception e) {  
    394             throw new RuntimeException(e);  
    395         } finally {  
    396             if (br != null) {  
    397                 try {  
    398                     br.close();  
    399                 } catch (IOException e) {  
    400                     br = null;  
    401                     throw new RuntimeException(e);  
    402                 }  
    403             }  
    404         }  
    405         return resultBuffer.toString();  
    406     }  
    407   
    408     /** 
    409      * @Description:使用HttpClient发送get请求 
    410      * @author:liuyc 
    411      * @time:2016年5月17日 下午3:28:56 
    412      */  
    413     public static String httpClientGet(String urlParam, Map<String, Object> params, String charset) {  
    414         StringBuffer resultBuffer = null;  
    415         HttpClient client = new DefaultHttpClient();  
    416         BufferedReader br = null;  
    417         // 构建请求参数  
    418         StringBuffer sbParams = new StringBuffer();  
    419         if (params != null && params.size() > 0) {  
    420             for (Entry<String, Object> entry : params.entrySet()) {  
    421                 sbParams.append(entry.getKey());  
    422                 sbParams.append("=");  
    423                 try {  
    424                     sbParams.append(URLEncoder.encode(String.valueOf(entry.getValue()), charset));  
    425                 } catch (UnsupportedEncodingException e) {  
    426                     throw new RuntimeException(e);  
    427                 }  
    428                 sbParams.append("&");  
    429             }  
    430         }  
    431         if (sbParams != null && sbParams.length() > 0) {  
    432             urlParam = urlParam + "?" + sbParams.substring(0, sbParams.length() - 1);  
    433         }  
    434         HttpGet httpGet = new HttpGet(urlParam);  
    435         try {  
    436             HttpResponse response = client.execute(httpGet);  
    437             // 读取服务器响应数据  
    438             br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));  
    439             String temp;  
    440             resultBuffer = new StringBuffer();  
    441             while ((temp = br.readLine()) != null) {  
    442                 resultBuffer.append(temp);  
    443             }  
    444         } catch (Exception e) {  
    445             throw new RuntimeException(e);  
    446         } finally {  
    447             if (br != null) {  
    448                 try {  
    449                     br.close();  
    450                 } catch (IOException e) {  
    451                     br = null;  
    452                     throw new RuntimeException(e);  
    453                 }  
    454             }  
    455         }  
    456         return resultBuffer.toString();  
    457     }  
    458   
    459     /** 
    460      * @Description:使用socket发送post请求 
    461      * @author:liuyc 
    462      * @time:2016年5月18日 上午9:26:22 
    463      */  
    464     public static String sendSocketPost(String urlParam, Map<String, Object> params, String charset) {  
    465         String result = "";  
    466         // 构建请求参数  
    467         StringBuffer sbParams = new StringBuffer();  
    468         if (params != null && params.size() > 0) {  
    469             for (Entry<String, Object> entry : params.entrySet()) {  
    470                 sbParams.append(entry.getKey());  
    471                 sbParams.append("=");  
    472                 sbParams.append(entry.getValue());  
    473                 sbParams.append("&");  
    474             }  
    475         }  
    476         Socket socket = null;  
    477         OutputStreamWriter osw = null;  
    478         InputStream is = null;  
    479         try {  
    480             URL url = new URL(urlParam);  
    481             String host = url.getHost();  
    482             int port = url.getPort();  
    483             if (-1 == port) {  
    484                 port = 80;  
    485             }  
    486             String path = url.getPath();  
    487             socket = new Socket(host, port);  
    488             StringBuffer sb = new StringBuffer();  
    489             sb.append("POST " + path + " HTTP/1.1
    ");  
    490             sb.append("Host: " + host + "
    ");  
    491             sb.append("Connection: Keep-Alive
    ");  
    492             sb.append("Content-Type: application/x-www-form-urlencoded; charset=utf-8 
    ");  
    493             sb.append("Content-Length: ").append(sb.toString().getBytes().length).append("
    ");  
    494             // 这里一个回车换行,表示消息头写完,不然服务器会继续等待  
    495             sb.append("
    ");  
    496             if (sbParams != null && sbParams.length() > 0) {  
    497                 sb.append(sbParams.substring(0, sbParams.length() - 1));  
    498             }  
    499             osw = new OutputStreamWriter(socket.getOutputStream());  
    500             osw.write(sb.toString());  
    501             osw.flush();  
    502             is = socket.getInputStream();  
    503             String line = null;  
    504             // 服务器响应体数据长度  
    505             int contentLength = 0;  
    506             // 读取http响应头部信息  
    507             do {  
    508                 line = readLine(is, 0, charset);  
    509                 if (line.startsWith("Content-Length")) {  
    510                     // 拿到响应体内容长度  
    511                     contentLength = Integer.parseInt(line.split(":")[1].trim());  
    512                 }  
    513                 // 如果遇到了一个单独的回车换行,则表示请求头结束  
    514             } while (!line.equals("
    "));  
    515             // 读取出响应体数据(就是你要的数据)  
    516             result = readLine(is, contentLength, charset);  
    517         } catch (Exception e) {  
    518             throw new RuntimeException(e);  
    519         } finally {  
    520             if (osw != null) {  
    521                 try {  
    522                     osw.close();  
    523                 } catch (IOException e) {  
    524                     osw = null;  
    525                     throw new RuntimeException(e);  
    526                 } finally {  
    527                     if (socket != null) {  
    528                         try {  
    529                             socket.close();  
    530                         } catch (IOException e) {  
    531                             socket = null;  
    532                             throw new RuntimeException(e);  
    533                         }  
    534                     }  
    535                 }  
    536             }  
    537             if (is != null) {  
    538                 try {  
    539                     is.close();  
    540                 } catch (IOException e) {  
    541                     is = null;  
    542                     throw new RuntimeException(e);  
    543                 } finally {  
    544                     if (socket != null) {  
    545                         try {  
    546                             socket.close();  
    547                         } catch (IOException e) {  
    548                             socket = null;  
    549                             throw new RuntimeException(e);  
    550                         }  
    551                     }  
    552                 }  
    553             }  
    554         }  
    555         return result;  
    556     }  
    557   
    558     /** 
    559      * @Description:使用socket发送get请求 
    560      * @author:liuyc 
    561      * @time:2016年5月18日 上午9:27:18 
    562      */  
    563     public static String sendSocketGet(String urlParam, Map<String, Object> params, String charset) {  
    564         String result = "";  
    565         // 构建请求参数  
    566         StringBuffer sbParams = new StringBuffer();  
    567         if (params != null && params.size() > 0) {  
    568             for (Entry<String, Object> entry : params.entrySet()) {  
    569                 sbParams.append(entry.getKey());  
    570                 sbParams.append("=");  
    571                 sbParams.append(entry.getValue());  
    572                 sbParams.append("&");  
    573             }  
    574         }  
    575         Socket socket = null;  
    576         OutputStreamWriter osw = null;  
    577         InputStream is = null;  
    578         try {  
    579             URL url = new URL(urlParam);  
    580             String host = url.getHost();  
    581             int port = url.getPort();  
    582             if (-1 == port) {  
    583                 port = 80;  
    584             }  
    585             String path = url.getPath();  
    586             socket = new Socket(host, port);  
    587             StringBuffer sb = new StringBuffer();  
    588             sb.append("GET " + path + " HTTP/1.1
    ");  
    589             sb.append("Host: " + host + "
    ");  
    590             sb.append("Connection: Keep-Alive
    ");  
    591             sb.append("Content-Type: application/x-www-form-urlencoded; charset=utf-8 
    ");  
    592             sb.append("Content-Length: ").append(sb.toString().getBytes().length).append("
    ");  
    593             // 这里一个回车换行,表示消息头写完,不然服务器会继续等待  
    594             sb.append("
    ");  
    595             if (sbParams != null && sbParams.length() > 0) {  
    596                 sb.append(sbParams.substring(0, sbParams.length() - 1));  
    597             }  
    598             osw = new OutputStreamWriter(socket.getOutputStream());  
    599             osw.write(sb.toString());  
    600             osw.flush();  
    601             is = socket.getInputStream();  
    602             String line = null;  
    603             // 服务器响应体数据长度  
    604             int contentLength = 0;  
    605             // 读取http响应头部信息  
    606             do {  
    607                 line = readLine(is, 0, charset);  
    608                 if (line.startsWith("Content-Length")) {  
    609                     // 拿到响应体内容长度  
    610                     contentLength = Integer.parseInt(line.split(":")[1].trim());  
    611                 }  
    612                 // 如果遇到了一个单独的回车换行,则表示请求头结束  
    613             } while (!line.equals("
    "));  
    614             // 读取出响应体数据(就是你要的数据)  
    615             result = readLine(is, contentLength, charset);  
    616         } catch (Exception e) {  
    617             throw new RuntimeException(e);  
    618         } finally {  
    619             if (osw != null) {  
    620                 try {  
    621                     osw.close();  
    622                 } catch (IOException e) {  
    623                     osw = null;  
    624                     throw new RuntimeException(e);  
    625                 } finally {  
    626                     if (socket != null) {  
    627                         try {  
    628                             socket.close();  
    629                         } catch (IOException e) {  
    630                             socket = null;  
    631                             throw new RuntimeException(e);  
    632                         }  
    633                     }  
    634                 }  
    635             }  
    636             if (is != null) {  
    637                 try {  
    638                     is.close();  
    639                 } catch (IOException e) {  
    640                     is = null;  
    641                     throw new RuntimeException(e);  
    642                 } finally {  
    643                     if (socket != null) {  
    644                         try {  
    645                             socket.close();  
    646                         } catch (IOException e) {  
    647                             socket = null;  
    648                             throw new RuntimeException(e);  
    649                         }  
    650                     }  
    651                 }  
    652             }  
    653         }  
    654         return result;  
    655     }  
    656   
    657     /** 
    658      * @Description:读取一行数据,contentLe内容长度为0时,读取响应头信息,不为0时读正文 
    659      * @time:2016年5月17日 下午6:11:07 
    660      */  
    661     private static String readLine(InputStream is, int contentLength, String charset) throws IOException {  
    662         List<Byte> lineByte = new ArrayList<Byte>();  
    663         byte tempByte;  
    664         int cumsum = 0;  
    665         if (contentLength != 0) {  
    666             do {  
    667                 tempByte = (byte) is.read();  
    668                 lineByte.add(Byte.valueOf(tempByte));  
    669                 cumsum++;  
    670             } while (cumsum < contentLength);// cumsum等于contentLength表示已读完  
    671         } else {  
    672             do {  
    673                 tempByte = (byte) is.read();  
    674                 lineByte.add(Byte.valueOf(tempByte));  
    675             } while (tempByte != 10);// 换行符的ascii码值为10  
    676         }  
    677   
    678         byte[] resutlBytes = new byte[lineByte.size()];  
    679         for (int i = 0; i < lineByte.size(); i++) {  
    680             resutlBytes[i] = (lineByte.get(i)).byteValue();  
    681         }  
    682         return new String(resutlBytes, charset);  
    683     }  
    684       
    685 }  
  • 相关阅读:
    一天一个 Linux 命令(44):ifstat 命令
    Java集合框架示意图
    Java中String类常见问题汇总
    一天一个 Linux 命令(43):netstat 命令
    Windows系统下,如何设置maven字符编码
    Java文件操作编程
    Java 注解(Annotation)
    Linux Centos7.4 更新Java jdk版本
    Java基础(6)Java数据类型扩展
    Windows系统下Elasticsearch7.15.2单服务器配置多节点
  • 原文地址:https://www.cnblogs.com/lifan12589/p/11719837.html
Copyright © 2020-2023  润新知