1. 程式人生 > >java模擬表單提交資料

java模擬表單提交資料

package com.http;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import
java.nio.charset.Charset; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.HttpMultipartMode; import
org.apache.http.entity.mime.MultipartEntity; //import org.apache.http.entity.mime.content.ContentBody; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.DefaultHttpClient; import net.sf.json.JSONObject; public
class NetworkHttps { //網路列舉 public static final String FAILURE = "failure";//失敗 public static final String SUCCESSFUL = "successful"; //成功 public static final String HTTPSFAILURE = "HTTPSFAILURE"; //網路失敗 public static final String HTTPSSUCCESSFUL = "HTTPSSUCCESSFUL"; //網路成功 public static final String IOERROR = "IOERROR"; //流錯誤 public static final String IOSUCCESSFUL = "IORSUCCESSFUL"; //流成功 public static final String PARSINGJSONSUCCESSFUL = "PARSINGJSONSUCCESSFUL";//解析資料成功 public static final String PARSINGJSONFAILURE = "PARSINGJSONFAILURE";//解析識別失敗 // 對比狀態 public enum ContrastState { FAILURE, SUCCESSFUL, HTTPSFAILURE, HTTPSSUCCESSFUL, IOERROR, IORSUCCESSFUL,PARSINGJSONSUCCESSFUL,PARSINGJSONFAILURE } //key private static final String APIKEY = "USU89rsQjz-sy2If5Mvw-KLHyUtLqKTP"; private static final String APISECRET = "rpAXY_MmNU5ja7gjm1vUCNtMlwAAihPr"; /** * * @param key --- 請求的 key * @param secret -- 請求的secrt * @param imagePath -- 第一張頭像的照片 * @param imagePath2 -- 第二張頭像的照片 * @param httpPath -- 請求路徑 * @return map("state"="狀態", "json" = "返回 json 資料") * @throws ClientProtocolException * @throws IOException */ public static Map<String, Object> postFrameDate(String key,String secret,String imagePath,String imagePath2,String httpPath) { Map<String, Object> map = new HashMap<String, Object>(); JSONObject json = null; MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,"----------ThIs_Is_tHe_bouNdaRY_$", Charset.defaultCharset()); try { multipartEntity.addPart("apikey",new StringBody(key, Charset.forName("UTF-8"))); multipartEntity.addPart("apisecret",new StringBody(secret,Charset.forName("UTF-8"))); multipartEntity.addPart("aaa", new StringBody(secret,Charset.forName("UTF-8"))); //判斷是不是,人臉對比(2張圖片),人臉識別(1張圖片) if (imagePath2 != null && !"".equals(imagePath2)) { multipartEntity.addPart("image_file1", new FileBody(new File(imagePath),"image/png")); //(ContentBody) multipartEntity.addPart("image_file2", new FileBody(new File(imagePath2),"image/png")); } else { multipartEntity.addPart("image_file", new FileBody(new File(imagePath),"image/png")); //multipartEntity.addPart("return_landmark",new StringBody("1", Charset.forName("UTF-8"))); } HttpPost request = new HttpPost(httpPath); request.setEntity(multipartEntity); request.addHeader("Content-Type","multipart/form-data; boundary=----------ThIs_Is_tHe_bouNdaRY_$"); DefaultHttpClient httpClient = new DefaultHttpClient(); HttpResponse response =httpClient.execute(request); InputStream is = response.getEntity().getContent(); BufferedReader in = new BufferedReader(new InputStreamReader(is)); StringBuffer buffer = new StringBuffer(); String line = ""; while ((line = in.readLine()) != null) { buffer.append(line); } String data = buffer.toString(); json = JSONObject.fromObject(data); map.put("state", ContrastState.HTTPSSUCCESSFUL); map.put("json", json); return map; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("錯誤"+ e); map.put("state", ContrastState.HTTPSFAILURE); map.put("json",json); return map; } } /** * 解析資料(json 資料) * @param json * @return map (state = "解析狀態",confidence = "相似度") */ public Map<String, Object> parsingJson(JSONObject json){ Map<String, Object> map = new HashMap<String, Object>(); ContrastState state ;//狀態 double confidence = 0.0;//相似度 if(json != null && json.get("confidence") != null){ String string_json = json.get("confidence").toString(); confidence = Double.parseDouble(string_json); state = ContrastState.PARSINGJSONSUCCESSFUL; map.put("state", state); map.put("confidence", confidence); return map; } map.put("state", ContrastState.PARSINGJSONFAILURE); map.put("confidence", confidence); return map; } /************* 表單提交 最普通的方法 *****************/ // 每個post引數之間的分隔。隨意設定,只要不會和其他的字串重複即可。 private static final String BOUNDARY = "----------HV2ymHFg03ehbqgZCaKO6jyH"; /** * 普通的方法,表單資料提交 * @param serverUrl 路徑 * @param generalFormFields 提交文字資料,陣列<FormFieldKeyValuePair> * @param filesToBeUploaded 提交檔案 ,陣列<UploadFileItem> * @return ArrayList<FormFieldKeyValuePair> generalFormFields * @throws Exception */ public String sendHttpPostRequest(String serverUrl,ArrayList<FormFieldKeyValuePair> generalFormFields, ArrayList<UploadFileItem> filesToBeUploaded) throws Exception { // 向伺服器傳送post請求 URL url = new URL(serverUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 傳送POST請求必須設定如下兩行 connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setRequestMethod("POST"); connection.setRequestProperty("Connection", "Keep-Alive"); connection.setRequestProperty("Charset", "UTF-8"); connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); // 頭 String boundary = BOUNDARY; // 傳輸內容 StringBuffer contentBody = new StringBuffer("--" + BOUNDARY); // 尾 String endBoundary = "\r\n--" + boundary + "--\r\n"; OutputStream out = connection.getOutputStream(); // 1. 處理文字形式的POST請求 for (FormFieldKeyValuePair ffkvp : generalFormFields) { contentBody.append("\r\n") .append("Content-Disposition: form-data; name=\"") .append(ffkvp.getKey() + "\"") .append("\r\n") .append("\r\n") .append(ffkvp.getValue()) .append("\r\n") .append("--") .append(boundary); } String boundaryMessage1 = contentBody.toString(); out.write(boundaryMessage1.getBytes("utf-8")); // 2. 處理檔案上傳 for (UploadFileItem ufi : filesToBeUploaded) { contentBody = new StringBuffer(); contentBody.append("\r\n") .append("Content-Disposition:form-data; name=\"") .append(ufi.getFormFieldName() + "\"; ") // form中field的名稱 .append("filename=\"") .append(ufi.getFileName() + "\"") // 上傳檔案的檔名,包括目錄 .append("\r\n") .append("Content-Type:application/octet-stream") .append("\r\n\r\n"); String boundaryMessage2 = contentBody.toString(); out.write(boundaryMessage2.getBytes("utf-8")); // 開始真正向伺服器寫檔案 File file = new File(ufi.getFileName()); DataInputStream dis = new DataInputStream(new FileInputStream(file)); int bytes = 0; byte[] bufferOut = new byte[(int) file.length()]; bytes = dis.read(bufferOut); out.write(bufferOut, 0, bytes); dis.close(); contentBody.append("------------HV2ymHFg03ehbqgZCaKO6jyH"); String boundaryMessage = contentBody.toString(); out.write(boundaryMessage.getBytes("utf-8")); // System.out.println(boundaryMessage); } out.write("------------HV2ymHFg03ehbqgZCaKO6jyH--\r\n" .getBytes("UTF-8")); // 3. 寫結尾 out.write(endBoundary.getBytes("utf-8")); out.flush(); out.close(); // 4. 從伺服器獲得回答的內容 String strLine = ""; String strResponse = ""; InputStream in = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); while ((strLine = reader.readLine()) != null) { strResponse += strLine + "\n"; } // System.out.print(strResponse); return strResponse; } }