HttpUtil
http请求
package com.hopedove.commons.utils; import org.apache.http.*; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.ssl.SSLContextBuilder; import org.apache.http.util.EntityUtils; import javax.net.ssl.SSLContext; import java.io.*; import java.net.URI; import java.security.KeyManagementException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; /** * Http请求 */ public class HttpUtil { /** * get请求 * @return */ public static String doGet(String url) { try { // HttpClient client = new DefaultHttpClient(); SSLContext sslContext = new SSLContextBuilder() .loadTrustMaterial(null, (certificate, authType) -> true).build(); CloseableHttpClient client = HttpClients.custom() .setSSLContext(sslContext) .setSSLHostnameVerifier(new NoopHostnameVerifier()) .build(); //发送get请求 HttpGet request = new HttpGet(url); HttpResponse response = client.execute(request); /**请求发送成功,并得到响应**/ if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { /**读取服务器返回过来的json字符串数据**/ String strResult = EntityUtils.toString(response.getEntity()); return strResult; } } catch (IOException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyStoreException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } return null; } /** * post请求(用于key-value格式的参数) * @param url * @param params * @return */ public static String doPost(String url, Map params){ BufferedReader in = null; try { // 定义HttpClient // HttpClient client = new DefaultHttpClient(); SSLContext sslContext = new SSLContextBuilder() .loadTrustMaterial(null, (certificate, authType) -> true).build(); CloseableHttpClient client = HttpClients.custom() .setSSLContext(sslContext) .setSSLHostnameVerifier(new NoopHostnameVerifier()) .build(); // 实例化HTTP方法 HttpPost request = new HttpPost(); request.setURI(new URI(url)); //设置参数 List<NameValuePair> nvps = new ArrayList<NameValuePair>(); for (Iterator iter = params.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String value = String.valueOf(params.get(name)); nvps.add(new BasicNameValuePair(name, value)); //System.out.println(name +"-"+value); } request.setEntity(new UrlEncodedFormEntity(nvps,HTTP.UTF_8)); HttpResponse response = client.execute(request); int code = response.getStatusLine().getStatusCode(); if(code == 200){ //请求成功 in = new BufferedReader(new InputStreamReader(response.getEntity() .getContent(),"utf-8")); StringBuffer sb = new StringBuffer(""); String line = ""; String NL = System.getProperty("line.separator"); while ((line = in.readLine()) != null) { sb.append(line + NL); } in.close(); return sb.toString(); } else{ // System.out.println("状态码:" + code); return null; } } catch(Exception e){ e.printStackTrace(); return null; } } /** * post请求(用于请求json格式的参数) * @param url * @param params * @return */ public static String doPost(String url, String params) throws Exception { // CloseableHttpClient httpclient = HttpClients.createDefault(); SSLContext sslContext = new SSLContextBuilder() .loadTrustMaterial(null, (certificate, authType) -> true).build(); CloseableHttpClient httpclient = HttpClients.custom() .setSSLContext(sslContext) .setSSLHostnameVerifier(new NoopHostnameVerifier()) .build(); HttpPost httpPost = new HttpPost(url);// 创建httpPost httpPost.setHeader("Accept", "application/json"); httpPost.setHeader("Content-Type", "application/json"); String charSet = "UTF-8"; StringEntity entity = new StringEntity(params, charSet); httpPost.setEntity(entity); CloseableHttpResponse response = null; try { response = httpclient.execute(httpPost); StatusLine status = response.getStatusLine(); int state = status.getStatusCode(); if (state == HttpStatus.SC_OK) { HttpEntity responseEntity = response.getEntity(); String jsonString = EntityUtils.toString(responseEntity); return jsonString; } else{ //logger.error("请求返回:"+state+"("+url+")"); } } finally { if (response != null) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } try { httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } /** * 下载图片或文件 * @param url 网络地址 * @param path 保存的路径 * @return */ public static String doDownload(String url,String path) { try { // HttpClient client = new DefaultHttpClient(); SSLContext sslContext = new SSLContextBuilder() .loadTrustMaterial(null, (certificate, authType) -> true).build(); CloseableHttpClient client = HttpClients.custom() .setSSLContext(sslContext) .setSSLHostnameVerifier(new NoopHostnameVerifier()) .build(); //发送get请求 HttpGet request = new HttpGet(url); HttpResponse response = client.execute(request); /**请求发送成功,并得到响应**/ if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { HttpEntity entity = response.getEntity(); InputStream content = entity.getContent(); File file = new File(path); file.getParentFile().mkdirs(); FileOutputStream fileOutputStream = new FileOutputStream(file); byte[] bytes = new byte[1024]; int i; while ((i=content.read(bytes))!=-1){ fileOutputStream.write(bytes,0,i); } fileOutputStream.close(); content.close(); } } catch (IOException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyStoreException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } return null; } }
使用:
package com.hopedove.commons.utils; import com.hopedove.commons.exception.BusinException; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import java.util.HashMap; import java.util.Map; public class WxUtil { public static final String appid = "wx1d121cd4834beeac"; private static final String secret = "ff8e924c1d2b37295cae7d79d7acafca"; private static final String jscode2sessionUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code"; private static final String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret; private static final String phonenumberUrl = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=%s"; /** * 获取session * @param code * @return */ public static Map<String,String> code2Session(String code){ String url = String.format(jscode2sessionUrl,appid,secret,code); String res = HttpUtil.doGet(url); return JsonUtil.readValue(res, HashMap.class); } /** * 获取AccessToken * @return */ public static Map<String,Object> getAccessToken(){ String res = HttpUtil.doGet(tokenUrl); return JsonUtil.readValue(res, HashMap.class); } /** * 获取手机号码 * @param accessToken * @param code 手机验证码 * @return * @throws Exception */ public static String getUserPhoneNumber(String accessToken,String code) throws Exception{ String url = String.format(phonenumberUrl,accessToken); String res = HttpUtil.doPost(url, "code=" + code); HashMap map = JsonUtil.readValue(res, HashMap.class); Integer errcode = (Integer)map.get("errcode"); if(errcode!=0){ throw new BusinException("500","获取手机号失败"); } HashMap phone_info = (HashMap)map.get("phone_info"); String phoneNumber = (String)phone_info.get("phoneNumber"); return phoneNumber; } public static void main(String[] args) { String url = "https://thirdwx.qlogo.cn/mmopen/vi_32/SticnxHDMtOVAS7MFQvYGdfNrib6ibhpltMTnuIPdTm1THvvGduJln4Kk6ibD1HwnwNdtP22oCmicSAnTUQlw4odpPg/132"; HttpUtil.doDownload(url,"D:\\wx1.png"); } }