java模擬發(fā)送form-data的請求方式
更新時間:2020年05月05日 17:23:44 作者:NPException
這篇文章主要介紹了java模擬發(fā)送form-data的請求方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
我就廢話不多說了,大家還是直接看代碼吧!
package com.silot.test; import org.apache.http.HttpResponse; 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.StringBody; import org.apache.http.impl.client.DefaultHttpClient; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.Charset; public class TestCli { public static void main(String args[]) throws Exception { MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, "------------------------------0ea3fcae38ff", Charset.defaultCharset()); multipartEntity.addPart("skey", new StringBody("哈哈哈哈哈", Charset.forName("UTF-8"))); multipartEntity.addPart("operator", new StringBody("啦啦啦啦", Charset.forName("UTF-8"))); multipartEntity.addPart("VrfKey", new StringBody("渣渣渣", Charset.forName("UTF-8"))); multipartEntity.addPart("StatCode", new StringBody("00", Charset.forName("UTF-8"))); multipartEntity.addPart("mass_id", new StringBody("1234", Charset.forName("UTF-8"))); multipartEntity.addPart("reference_id", new StringBody("21231544", Charset.forName("UTF-8"))); HttpPost request = new HttpPost("http://xiefei.s1.natapp.cc/v1/withdrawCallback"); request.setEntity(multipartEntity); request.addHeader("Content-Type", "Content-Disposition: form-data; boundary=------------------------------0ea3fcae38ff"); 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); } System.out.println("發(fā)送消息收到的返回:" + buffer.toString()); } }
補充知識:java模擬復雜表單post請求
java模擬復雜表單post請求
能支持文件上傳
/** * 支持復雜表單,比如文件上傳 * @param formParam * @return * @throws Exception */ public static String postWithForm(FormParam formParam) throws Exception { String url = formParam.getUrl(); String charset = "UTF-8"; String boundary = Long.toHexString(System.currentTimeMillis()); // Just generate some unique random value. String CRLF = "\r\n"; // Line separator required by multipart/form-data. URLConnection connection = new URL(url).openConnection(); connection.setDoOutput(true); connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); try ( OutputStream output = connection.getOutputStream(); PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, charset), true); ) { // make body param Map<String, String> bodyParam = formParam.getBodyParam(); if (null != bodyParam) { for (String p : bodyParam.keySet()) { writer.append("--" + boundary).append(CRLF); writer.append("Content-Disposition: form-data; name=\"" + p + "\"").append(CRLF); writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF); writer.append(CRLF).append(bodyParam.get(p)).append(CRLF).flush(); } } // Send file. Map<String, File> fileParam = formParam.getFileParam(); if (null != fileParam) { for (String fileName : fileParam.keySet()) { writer.append("--" + boundary).append(CRLF); writer.append("Content-Disposition: form-data; name=\"" + fileName + "\"; filename=\"" + fileParam.get(fileName).getName() + "\"").append(CRLF); writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(fileName)).append(CRLF); writer.append("Content-Transfer-Encoding: binary").append(CRLF); writer.append(CRLF).flush(); Files.copy(fileParam.get(fileName).toPath(), output); output.flush(); // Important before continuing with writer! writer.append(CRLF).flush(); // CRLF is important! It indicates end of boundary. } } // End of multipart/form-data. writer.append("--" + boundary + "--").append(CRLF).flush(); } HttpURLConnection conn = (HttpURLConnection) connection; ByteArrayOutputStream bout = new ByteArrayOutputStream(); int len; byte[] buffer = new byte[1024]; while ((len = conn.getInputStream().read(buffer)) != -1) { bout.write(buffer, 0, len); } String result = new String(bout.toByteArray(), "utf-8"); return result; }
FormParam封裝類:
package net.riking.core.utils; import java.io.File; import java.util.Map; public class FormParam { private String url; // private String auth; // /** // * http請求頭里的參數(shù) // */ // private Map<String, String> headerParam; /** * 常規(guī)參數(shù) */ private Map<String, String> bodyParam; /** * 待上傳的文件參數(shù) filename和file */ private Map<String, File> fileParam; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } // public String getAuth() { // return auth; // } // // public void setAuth(String auth) { // this.auth = auth; // } // // public Map<String, String> getHeaderParam() { // return headerParam; // } // // public void setHeaderParam(Map<String, String> headerParam) { // this.headerParam = headerParam; // } public Map<String, String> getBodyParam() { return bodyParam; } public void setBodyParam(Map<String, String> bodyParam) { this.bodyParam = bodyParam; } public Map<String, File> getFileParam() { return fileParam; } public void setFileParam(Map<String, File> fileParam) { this.fileParam = fileParam; } }
以上這篇java模擬發(fā)送form-data的請求方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
最新IntelliJ?IDEA?2022配置?Tomcat?8.5?的詳細步驟演示
這篇文章主要介紹了IntelliJ?IDEA?2022?詳細配置?Tomcat?8.5?步驟演示,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08springboot集成swagger、knife4j及常用注解的使用
這篇文章主要介紹了springboot集成swagger、knife4j及常用注解的使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07Java中的線程安全集合CopyOnWriteArrayList解析
這篇文章主要介紹了Java中的線程安全CopyOnWriteArrayList解析,CopyOnWriteArrayList是ArrayList的線程安全版本,從他的名字可以推測,CopyOnWriteArrayList是在有寫操作的時候會copy一份數(shù)據(jù),然后寫完再設置成新的數(shù)據(jù),需要的朋友可以參考下2023-12-12springboot新建項目pom.xml文件第一行報錯的解決
這篇文章主要介紹了springboot新建項目pom.xml文件第一行報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01Java數(shù)組,去掉重復值、增加、刪除數(shù)組元素的方法
下面小編就為大家?guī)硪黄狫ava數(shù)組,去掉重復值、增加、刪除數(shù)組元素的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10