import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/** * Verify Post请求示例 */
public class VerifyRequest {
public static void main(String[] args) {
String url = "https://api.megvii.com/faceid/v2/verify";
String mBestPath = "活体最佳质量图本地路径";
String mEnvPath = "活体全景图本地路径";
String mDelta = "活体SDK获取的delta";
Map textMap = new HashMap();
Map fileMap = new HashMap();
//设置字段
textMap.put("api_key", "你的api_key");
textMap.put("api_secret", "你的api_secret");
textMap.put("comparison_type", "1");
textMap.put("face_image_type", "meglive");
textMap.put("idcard_name", "姓名");
textMap.put("idcard_number", "证件号");
textMap.put("delta", mDelta);
fileMap.put("image_best", mBestPath);
fileMap.put("image_env", mEnvPath);
String ret = formUpload(url, textMap, fileMap);
//输出结果
System.out.println(ret);
}
/**
* 实现http post请求 form-data形式上传
* @param urlStrl [请求地址]
* @param textMap [string 字段集合]
* @param fileMap [file 字段集合]
* @return 请求信息
*/
@SuppressWarnings("rawtypes")
public static String formUpload(String urlStr, Map textMap,
Map fileMap) {
String res = "";
HttpURLConnection conn = null;
String BOUNDARY = "-----------12345654321-------------";
try {
//设置请求参数
URL url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setReadTimeout(30000);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
conn.setRequestProperty("Content-Type",
"multipart/form-data; boundary=" + BOUNDARY);
conn.setRequestProperty("Charset", "UTF-8");
OutputStream out = new DataOutputStream(conn.getOutputStream());
// 对File 和 String 集合进行判空
if (textMap != null) {
StringBuffer strBuf = new StringBuffer();
Iterator iter = textMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String inputName = (String) entry.getKey();
String inputValue = (String) entry.getValue();
if (inputValue == null) {
continue;
}
strBuf.append("\r\n").append("--").append(BOUNDARY)
.append("\r\n");
strBuf.append("Content-Disposition: form-data; name=\"" +
inputName + "\"\r\n\r\n");
strBuf.append(inputValue);
}
out.write(strBuf.toString().getBytes("UTF-8"));
}
if (fileMap != null) {
Iterator iter = fileMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String inputName = (String) entry.getKey();
String inputValue = (String) entry.getValue();
if (inputValue == null) {
continue;
}
File file = new File(inputValue);
String filename = file.getName();
StringBuffer strBuf = new StringBuffer();
strBuf.append("\r\n").append("--").append(BOUNDARY)
.append("\r\n");
strBuf.append("Content-Disposition: form-data; name=\"" +
inputName + "\"; filename=\"" + filename + "\"\r\n");
strBuf.append("Content-Type:" + "application/octet-stream" +
"\r\n\r\n");
out.write(strBuf.toString().getBytes());
DataInputStream in = new DataInputStream(new FileInputStream(
file));
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
in.close();
}
}
byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
out.write(endData);
out.flush();
out.close();
int responseCode = conn.getResponseCode();
if (responseCode == 200) {
// 读取正确返回信息
StringBuffer strBuf = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
strBuf.append(line).append("\n");
}
res = strBuf.toString();
reader.close();
reader = null;
} else {
// 读取错误返回信息
StringBuffer error = new StringBuffer();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
conn.getErrorStream()));
String line1 = null;
while ((line1 = bufferedReader.readLine()) != null) {
error.append(line1).append("\n");
}
res = error.toString();
bufferedReader.close();
bufferedReader = null;
}
} catch (Exception e) {
System.out.println("发送POST请求出错。" + e);
e.printStackTrace();
} finally {
//关闭流
if (conn != null) {
conn.disconnect();
conn = null;
}
}
//返回信息
return res;
}
}