https form 表单

本文详细介绍了如何使用Java实现向指定URL上传黑名单数据的过程。通过构造包含文本参数和文件参数的Map,设置HTTP请求头,利用DataOutputStream进行POST请求,实现了黑名单数据的上报。文章深入解析了multipart/form-data格式的POST请求构建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String url = "https://vauth.cloud.gmw.cn/down/liveinter/uploadBlackData.html";
Map<String, Object> textMap = new HashMap<String, Object>(); 
textMap.put("p_id", ID_CARD);
textMap.put("p_code", SAFE_CODE);
textMap.put("p_key", SAFE_KEY);
textMap.put("v_card", v_card);
textMap.put("v_type", v_type);
Map<String, String> fileMap = new HashMap<String, String>(); 
fileMap.put("v_upfiles", v_upfiles); 
logger.info("黑名单上报对接:Url:"+url+",v_upfiles:"+v_upfiles);
String ret = formUpload(url, textMap, fileMap); 

String url = "https://vauth.cloud.gmw.cn/down/liveinter/uploadBlackData.html";
Map<String, Object> textMap = new HashMap<String, Object>(); 
textMap.put("p_id", ID_CARD);
textMap.put("p_code", SAFE_CODE);
textMap.put("p_key", SAFE_KEY);
textMap.put("v_card", v_card);
textMap.put("v_type", v_type);
Map<String, String> fileMap = new HashMap<String, String>(); 
fileMap.put("v_upfiles", v_upfiles); 
logger.info("黑名单上报对接:Url:"+url+",v_upfiles:"+v_upfiles);
String ret = formUpload(url, textMap, fileMap); 



public static String formUpload(String urlStr, Map<String, Object> textMap,

   Map<String, String> fileMap) { 
  String res = ""; 
  HttpURLConnection conn = null; 
  String BOUNDARY = "---------------------------WebKitFormBoundary7MA4YWxkTrZu0gW"; //boundary就是request头和上传文件内容的分隔符 
  try { 
   URL url = new URL(urlStr); 
   if (url.getProtocol().toUpperCase().equals("HTTPS")) {  
    trustAllHosts();  
    HttpsURLConnection httpsCont = (HttpsURLConnection) url.openConnection();  
    httpsCont.setHostnameVerifier(DO_NOT_VERIFY);  
    conn = httpsCont;  
} else {  
    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); 
   OutputStream out = new DataOutputStream(conn.getOutputStream()); 
   // text 
   StringBuffer strBuf = new StringBuffer(); 
   if (textMap != null) { 
    Iterator iter = textMap.entrySet().iterator(); 
    while (iter.hasNext()) { 
     Map.Entry entry = (Map.Entry) iter.next(); 
     Object inputName =  entry.getKey(); 
     Object inputValue = 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); 
    } 
   } 
   // file 
   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(); 
     String contentType = new MimetypesFileTypeMap().getContentType(file); 
     if (filename.endsWith(".png")) { 
      contentType = "image/png"; 
     } else if(filename.endsWith(".jpg") || filename.endsWith(".jpeg")){
    contentType = "image/jpeg";
     }
     if (contentType == null || contentType.equals("")) { 
      contentType = "application/octet-stream"; 
     } 
     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:" + contentType + "\r\n\r\n"); 


System.out.println("strBuf: " + strBuf.toString());
     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(); 
   // 读取返回数据 
   StringBuffer strBuff = new StringBuffer(); 
   BufferedReader reader = new BufferedReader(new InputStreamReader( 
     conn.getInputStream())); 
   String line = null; 
   while ((line = reader.readLine()) != null) { 
  strBuff.append(line).append("\n"); 
   } 
   res = strBuff.toString(); 
   reader.close(); 
   reader = null; 
  } catch (Exception e) { 
   System.out.println("发送POST请求出错。" + urlStr); 
   e.printStackTrace(); 
  } finally { 
   if (conn != null) { 
    conn.disconnect(); 
    conn = null; 
   } 
  } 
  return res; 
} 

public static String formUpload(String urlStr, Map<String, Object> textMap,

   Map<String, String> fileMap) { 
  String res = ""; 
  HttpURLConnection conn = null; 
  String BOUNDARY = "---------------------------WebKitFormBoundary7MA4YWxkTrZu0gW"; //boundary就是request头和上传文件内容的分隔符 
  try { 
   URL url = new URL(urlStr); 
   if (url.getProtocol().toUpperCase().equals("HTTPS")) {  
    trustAllHosts();  
    HttpsURLConnection httpsCont = (HttpsURLConnection) url.openConnection();  
    httpsCont.setHostnameVerifier(DO_NOT_VERIFY);  
    conn = httpsCont;  
} else {  
    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); 
   OutputStream out = new DataOutputStream(conn.getOutputStream()); 
   // text 
   StringBuffer strBuf = new StringBuffer(); 
   if (textMap != null) { 
    Iterator iter = textMap.entrySet().iterator(); 
    while (iter.hasNext()) { 
     Map.Entry entry = (Map.Entry) iter.next(); 
     Object inputName =  entry.getKey(); 
     Object inputValue = 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); 
    } 
   } 
   // file 
   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(); 
     String contentType = new MimetypesFileTypeMap().getContentType(file); 
     if (filename.endsWith(".png")) { 
      contentType = "image/png"; 
     } else if(filename.endsWith(".jpg") || filename.endsWith(".jpeg")){
    contentType = "image/jpeg";
     }
     if (contentType == null || contentType.equals("")) { 
      contentType = "application/octet-stream"; 
     } 
     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:" + contentType + "\r\n\r\n"); 


System.out.println("strBuf: " + strBuf.toString());
     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(); 
   // 读取返回数据 
   StringBuffer strBuff = new StringBuffer(); 
   BufferedReader reader = new BufferedReader(new InputStreamReader( 
     conn.getInputStream())); 
   String line = null; 
   while ((line = reader.readLine()) != null) { 
  strBuff.append(line).append("\n"); 
   } 
   res = strBuff.toString(); 
   reader.close(); 
   reader = null; 
  } catch (Exception e) { 
   System.out.println("发送POST请求出错。" + urlStr); 
   e.printStackTrace(); 
  } finally { 
   if (conn != null) { 
    conn.disconnect(); 
    conn = null; 
   } 
  } 
  return res; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值