1. 程式人生 > >關於引用第三方接口發送數據的問題

關於引用第三方接口發送數據的問題

res fas ext connect integer dir char odi eval

今天上班搞了一個第三方接口測試的問題,因為之前沒做過沒有使用過HttpClient這個包,所以搞了好久

這邊是要傳遞6個參數,不能使用使用md5加密,並附帶時間戳,接受的是一個json類型不適用流處理的outputstream

首先要引入依賴

 1  <dependency>
 2             <groupId>org.apache.httpcomponents</groupId>
 3             <artifactId>httpclient</artifactId>
 4
<version>4.5.2</version> 5 </dependency> 6 7 <dependency> 8 <groupId>org.apache.httpcomponents</groupId> 9 <artifactId>httpclient-cache</artifactId> 10 <version>4.5</version> 11
</dependency> 12 13 <dependency> 14 <groupId>org.apache.httpcomponents</groupId> 15 <artifactId>httpmime</artifactId> 16 <version>4.3.2</version> 17 </dependency>

package com.Test;

import
java.io.*; import java.math.BigInteger; import java.net.*; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import lombok.extern.slf4j.Slf4j; import net.sf.json.JSONObject; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; @Slf4j public class appaddTest { public static final String ADD_URL = "url"; public static final String cmd = "cmd"; public static final String appid = "appid"; public static final String appkey= "appkey"; public static final String param = ""; public static final String comkeyid = "comkeyid"; public static final String comkey = "comkey"; public static final String com = "com"; public static final String part = ""; public static void main(String[] args) { // String result = sendGet(ADD_URL,param); // System.out.println(result); // appadd(); String result = sendPost(); System.out.println(result); } public static void appadd() { try { URL url = new URL(ADD_URL); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestMethod("POST"); connection.setUseCaches(false); connection.setInstanceFollowRedirects(true); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("Content-Type", "text/plain; charset=utf-8"); connection.connect(); PrintWriter out = new PrintWriter(connection.getOutputStream()); JSONObject obj = new JSONObject(); //設置cmd obj.element("cmd",cmd ); //設置appid obj.element("appid", appid); //設置param obj.element("param",param); //upr設置 com.alibaba.fastjson.JSONObject json = new com.alibaba.fastjson.JSONObject(); json.put("comkeyid",comkeyid); json.put("com",com); json.put("part",part); String stamp = (new Date().getTime()+"").substring(0,10); String md = stamp +comkey+com+part; String md2Md5 = md5digest(md); System.out.println("加密前"+md); System.out.println("加密後"+md2Md5); json.put("md",md2Md5); obj.element("upr", json.toJSONString()); //設置時間戳 obj.element("stamp", stamp); //設置md String MD = param + stamp+ json.toJSONString()+cmd+appkey; System.out.println("加密前"+MD); String MD2Md5 = md5digest(MD); System.out.println("加密後"+MD2Md5); obj.element("md",MD2Md5); out.print(obj.toString()); log.info(obj.toString()); out.flush(); out.close(); System.out.println(" connection.getInputStream():"+ connection.getInputStream()); BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream())); String lines; StringBuffer sb = new StringBuffer(""); while ((lines = reader.readLine()) != null) { lines = new String(lines.getBytes(), "utf-8"); sb.append(lines); } log.info(String.valueOf(sb)); reader.close(); connection.disconnect(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static String md5digest(String str){ String md5Str = null; MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5"); md5.update(str.getBytes()); md5Str = new BigInteger(1, md5.digest()).toString(16); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return md5Str; } public static String sendGet(String url, String param) { String result = ""; BufferedReader in = null; try { String urlNameString = url + "?" + param; URL realUrl = new URL(urlNameString); // 打開和URL之間的連接 URLConnection connection = realUrl.openConnection(); // 設置通用的請求屬性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("Content-Type", "text/plain; charset=utf-8"); // 建立實際的連接 connection.connect(); // 獲取所有響應頭字段 Map<String, List<String>> map = connection.getHeaderFields(); // 遍歷所有的響應頭字段 for (String key : map.keySet()) { System.out.println(key + "--->" + map.get(key)); } // 定義 BufferedReader輸入流來讀取URL的響應 in = new BufferedReader(new InputStreamReader( connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("發送GET請求出現異常!" + e); e.printStackTrace(); } // 使用finally塊來關閉輸入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; } public static String getParam(){ String upr =null; String paramUrl =null; com.alibaba.fastjson.JSONObject json = new com.alibaba.fastjson.JSONObject(); json.put("part",part); json.put("comkeyid",comkeyid); json.put("com",com); String stamp = (new Date().getTime()+"").substring(0,10); String md = stamp +comkey+com+part; String md2Md5 = md5digest(md); json.put("md",md2Md5); System.out.println("加密前"+md); System.out.println("加密後"+md2Md5); try { upr = URLEncoder.encode(json.toString(),"UTF-8"); paramUrl= URLEncoder.encode(param,"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } String MD = param + stamp+ json.toJSONString()+cmd+appkey; System.out.println("加密前"+MD); String MD2Md5 = md5digest(MD); System.out.println("加密後"+MD2Md5); String param = "cmd="+cmd+"&appid="+appid+"&param="+paramUrl+"&upr="+upr+"&stamp="+stamp+"&md="+MD2Md5; System.out.println(ADD_URL+"?"+param); return param; } public static String sendPost(){ CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(ADD_URL); CloseableHttpResponse response = null; String resultString = ""; //得到upr com.alibaba.fastjson.JSONObject json = new com.alibaba.fastjson.JSONObject(); json.put("comkeyid",comkeyid); json.put("com",com); json.put("part",part); String stamp = (new Date().getTime()+"").substring(0,10); String md = stamp +comkey+com+part; String md2Md5 = md5digest(md); System.out.println("加密前"+md); System.out.println("加密後"+md2Md5); json.put("md",md2Md5); //得到md String MD = param + stamp+ json.toJSONString()+cmd+appkey; System.out.println("加密前"+MD); String MD2Md5 = md5digest(MD); System.out.println("加密後"+MD2Md5); List<NameValuePair> paramList = new ArrayList<>(); paramList.add(new BasicNameValuePair("cmd",cmd )); paramList.add(new BasicNameValuePair("appid", appid)); paramList.add(new BasicNameValuePair("param",param)); paramList.add(new BasicNameValuePair("upr", json.toJSONString())); paramList.add(new BasicNameValuePair("stamp", stamp )); paramList.add(new BasicNameValuePair("md",MD2Md5)); try { UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList); httpPost.setEntity(entity); response = httpClient.execute(httpPost); resultString = EntityUtils.toString(response.getEntity(), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }catch (IOException e){ e.printStackTrace(); } finally { try { response.close(); } catch (IOException e) { e.printStackTrace(); } return resultString; } } }

關於引用第三方接口發送數據的問題