Java發(fā)送form-data請求的實例代碼
在Java中發(fā)送form-data請求,可以使用Apache HttpClient或OkHttp這樣的HTTP客戶端庫來發(fā)送請求。
一、HttpClient
1.添加依賴
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
2.代碼
package request;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import java.io.File;
import java.io.IOException;
public class FormDataExample {
public static void main(String[] args) throws IOException {
String url = "http://127.0.0.1:3000/aaa/fileUpload.jsp";
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody("text2", "value1");
builder.addTextBody("text3", "value2");
builder.addBinaryBody("file1", new File("D:\\fanwei\\學(xué)習(xí)\\工具地址.txt"), ContentType.APPLICATION_OCTET_STREAM, "filename2.txt");
String StringResult = sendPostFormData(url, builder);
System.out.println(StringResult);
}
/**
* @param url 請求地址
* @param builder
* @return
*/
public static String sendPostFormData(String url, MultipartEntityBuilder builder){
String StringResult = "";
//不需要手動關(guān)閉httpClient
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(url);
// 構(gòu)建form-data請求體
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
// 發(fā)送請求并獲取響應(yīng)
HttpResponse response = null;
try {
response = httpClient.execute(httpPost);
HttpEntity responseEntity = response.getEntity();
StringResult = EntityUtils.toString(responseEntity);
} catch (IOException e) {
StringResult = "errorException:" + e.getMessage();
e.printStackTrace();
}
return StringResult;
}
}對于HttpClient對象,HttpClientBuilder.create().build()創(chuàng)建的實例是不需要手動關(guān)閉的。
在使用HttpClientBuilder創(chuàng)建HttpClient對象時,不需要手動關(guān)閉HttpClient對象。這是因為HttpClientBuilder在創(chuàng)建HttpClient對象時,會自動管理底層的連接池和資源釋放。
HttpClientBuilder會創(chuàng)建一個CloseableHttpClient的實例,它實現(xiàn)了Closeable接口,可以自動關(guān)閉相關(guān)資源。當(dāng)不再需要使用HttpClient時,可以讓垃圾回收器自動回收HttpClient對象,并自動關(guān)閉底層的連接池和資源。
需要注意的是,如果使用了連接池,關(guān)閉HttpClient并不會立即關(guān)閉底層的連接池,而是將連接返回給連接池以供重用。連接池會根據(jù)一定的策略來管理連接的生命周期。因此,關(guān)閉HttpClient并不會立即關(guān)閉與服務(wù)器的連接,而是將連接返回給連接池以供下次使用。
總結(jié)起來,使用HttpClientBuilder創(chuàng)建的HttpClient對象不需要手動關(guān)閉,它會自動管理底層的連接池和資源釋放。當(dāng)不再需要使用HttpClient時,可以讓垃圾回收器自動回收HttpClient對象。
二、OkHttp
1.添加依賴
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>2.代碼
package request;
import okhttp3.*;
import java.io.File;
import java.io.IOException;
public class FormDataExample2 {
public static void main(String[] args) throws IOException {
OkHttpClient client = new OkHttpClient();
// 構(gòu)建form-data請求體
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("field1", "value1")
.addFormDataPart("field2", "value2")
.addFormDataPart("file", "filename.txt",
RequestBody.create(MediaType.parse("application/octet-stream"), new File("D:\\fanwei\\學(xué)習(xí)\\工具地址.txt")))
.build();
// 構(gòu)建請求
Request request = new Request.Builder()
.url("http://127.0.0.1:3000/aaa/fileUpload.jsp")
.post(requestBody)
.build();
// 發(fā)送請求并獲取響應(yīng)
try (Response response = client.newCall(request).execute()) {
String responseBody = response.body().string();
// 處理響應(yīng)
System.out.println(responseBody);
}
}
}其他發(fā)送請求,請參閱
httpclient 發(fā)送請求_httpclient發(fā)請求
文件上傳,請參閱
到此這篇關(guān)于Java發(fā)送form-data請求的文章就介紹到這了,更多相關(guān)Java發(fā)送form-data請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot整合redis實現(xiàn)發(fā)布訂閱功能介紹步驟
發(fā)布訂閱作為一種設(shè)計思想在很多開源組件中都有體現(xiàn),比如大家熟知的消息中間件等,可謂把發(fā)布訂閱這一思想體現(xiàn)的淋漓盡致了2022-09-09
Java Mybatis框架增刪查改與核心配置詳解流程與用法
MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。MyBatis 可以通過簡單的 XML 或注解來配置和映射原始類型、接口和 Java POJO為數(shù)據(jù)庫中的記錄2021-10-10
Java?Spring?Dubbo三種SPI機制的區(qū)別
這篇文章主要介紹了Java?Spring?Dubbo三種SPI機制的區(qū)別,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下2022-08-08
mybaties?plus?selectMaps和selectList的區(qū)別說明
這篇文章主要介紹了mybaties?plus?selectMaps和selectList的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
MyBatis-Plus?ORM數(shù)據(jù)庫和實體類映射方式
本文詳細介紹了MyBatis-Plus(MP)在數(shù)據(jù)庫和Java對象映射方面的功能,包括基本映射、主鍵生成策略、復(fù)雜映射(如嵌套對象和集合類型)以及自定義SQL的使用,MP通過豐富的注解和XML配置,簡化了數(shù)據(jù)庫操作,提高了開發(fā)效率2025-01-01
在Java項目中實現(xiàn)CI/CD持續(xù)集成與持續(xù)部署
這篇文章主要為大家介紹了在Java項目中實現(xiàn)CI/CD持續(xù)集成與持續(xù)部署詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06

