Java模拟表单post提交,可支持图片上传

2017-10-12 19:31:17来源:作者:人点击

分享

/**  * 模拟表单post  *  * @param textMap 文本域  * @param fileMap 文件  *  */ public static String postForm(String urlStr, Map<String, String> textMap, Map<String, String> fileMap) throws IOException {String res = "";HttpURLConnection conn = null;InputStream inS = null;OutputStream out = null;String BOUNDARY = "---------------------------123821742118716"; //boundary就是request头和上传文件内容的分隔符try {URL url = new URL(urlStr);conn = (HttpURLConnection) url.openConnection();if (conn instanceof HttpsURLConnection) { ((HttpsURLConnection) conn).setSSLSocketFactory(sslSocketFactory); ((HttpsURLConnection) conn).setHostnameVerifier(trustAnyHostnameVerifier);} conn.setConnectTimeout(19000);conn.setReadTimeout(19000);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); out = new DataOutputStream(conn.getOutputStream());// text valueif (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());} // fileif (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(".gif")) {contentType = "image/gif";} else if (filename.endsWith(".jpg")) {contentType = "image/jpeg";}if (contentType == null || contentType.equals("")) {contentType = "application/octet-stream";} 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:" + contentType + "/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);} }} byte[] endData = ("/r/n--" + BOUNDARY + "--/r/n").getBytes();out.write(endData);out.flush(); // 读取返回数据StringBuffer strBuf = new StringBuffer();inS = conn.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inS));String line = null;while ((line = reader.readLine()) != null) { strBuf.append(line).append("/n");}res = strBuf.toString();reader.close();reader = null;} catch (Exception e) {e.printStackTrace();} finally {if (out != null) { out.close();}if (inS != null) { inS.close();}if (conn != null) { conn.disconnect(); conn = null;}}return res; }

Java

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台