java模擬表單提交資料
阿新 • • 發佈:2019-02-15
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;
}
}