教程
pom文件需要引入依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.8</version>
</dependency>
单类实现代码如下
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
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.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
public class TestUpload {
public static String FilePost(String url, File value) throws Exception {
String BOUNDARY = java.util.UUID.randomUUID().toString();
MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, "--------------------"+BOUNDARY, Charset.defaultCharset());
multipartEntity.addPart("categoryId",new StringBody("1",Charset.forName("UTF-8")));
multipartEntity.addPart("storageType",new StringBody("1",Charset.forName("UTF-8")));
multipartEntity.addPart("file", new FileBody(value));
HttpPost request = new HttpPost(url);
request.setEntity(multipartEntity);
request.addHeader("Authorization","Basic c2FiZXI6c2FiZXJfc2VjcmV0");
request.addHeader("Content-Type", "multipart/form-data; boundary=--------------------"+BOUNDARY);
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("发送消息收到的返回:"+buffer);
return buffer.toString();
}
public static void main(String[] args) throws Exception {
ExecutorService es = Executors.newFixedThreadPool(20);
while(true){
Thread thread= new Thread(() ->{
try {
FilePost("http://172.16.10.201:20010/unify-resource/oss/endpoint/put-file-attach",new File("C:\\Users\\liuya\\Desktop\\图书馆.bmz"));
} catch (Exception e) {
e.printStackTrace();
}
});
es.execute(thread);
}
}
}
idea等编辑器里,run运行主方法。
相关知识
org.apache.httpcomponents 是 Apache HttpComponents 项目的 Java 客户端库,用于在 Java 中进行 HTTP 通信。该项目提供了一套用于处理 HTTP 请求和响应的工具和类库,使得开发者能够方便地进行 HTTP 请求、处理响应、管理连接等操作。下面对 org.apache.httpcomponents 的主要组件和功能进行详细解释。
- HttpClient 类 HttpClient 是 Apache HttpComponents 提供的一个核心类,用于发送 HTTP 请求并接收响应。可以创建 HttpClient 实例,并通过其提供的方法来执行各种类型的请求,如 GET、POST、PUT、DELETE 等。HttpClient 支持设置请求头、请求参数、超时时间等,并提供了丰富的 API 来处理响应。
- HttpRequest 和 HttpResponse 类 HttpRequest 和 HttpResponse 是 Apache HttpComponents 中的两个关键类。HttpRequest 表示一个 HTTP 请求,包含请求方法、URL、请求头、请求体等信息。HttpResponse 表示一个 HTTP 响应,包含状态码、响应头、响应体等信息。开发者可以使用这两个类来构建和处理 HTTP 请求和响应。
- HttpEntity 类 HttpEntity 表示 HTTP 消息的实体部分,它可以是请求的消息体或响应的消息体。HttpEntity 提供了获取和操作实体内容的方法,可以读取请求的数据,也可以设置响应的数据。HttpEntity 还支持不同类型的内容编码和传输方式,如二进制、文本、JSON、XML 等。
- NameValuePair 接口 NameValuePair 是一个接口,用于表示 HTTP 请求或响应中的一个键值对参数。可以通过实现该接口来创建请求参数或解析响应参数。NameValuePair 接口提供了 getKey() 和 getValue() 方法,分别用于获取键和值。
- HttpGet、HttpPost、HttpPut、HttpDelete 类 HttpGet、HttpPost、HttpPut 和 HttpDelete 是 Apache HttpComponents 提供的针对不同类型 HTTP 请求的具体实现类。这些类继承自 HttpRequestBase 类,并提供了对应请求类型的特定方法和属性。开发者可以使用这些类来创建 GET、POST、PUT 和 DELETE 请求,并设置相应的请求参数和请求头。
- HttpClientBuilder 类 HttpClientBuilder 是一个构建 HttpClient 实例的辅助类。通过 HttpClientBuilder,可以配置 HttpClient 的各种参数和属性,如连接池大小、连接超时时间、重试机制等。它提供了一系列方法来设置 HttpClient 的各种属性,并最终返回一个可用的 HttpClient 实例。
- CloseableHttpClient 接口 CloseableHttpClient 是 HttpClient 的子接口,它扩展了 AutoCloseable 接口。CloseableHttpClient 可以自动管理和释放与服务器的 HTTP 连接资源,确保连接的高效和正确关闭。
- HttpHost 类 HttpHost 是用于表示远程服务器主机信息的类。它包含主机名、端口号和协议类型等属性。可以使用 HttpHost 来构建请求的目标地址,并作为参数传递给 HttpClient 的请求方法。
- HttpParams 接口 HttpParams 是一个接口,用于表示 HTTP 请求的参数。它提供了一系列方法来设置和获取请求参数,如连接超时时间、Socket 缓冲区大小等。HttpParams 可以作为参数传递给 HttpClientBuilder 来配置 HttpClient 的属性。
总结: org.apache.httpcomponents 是 Apache HttpComponents 项目的 Java 客户端库,提供了丰富的类和接口来进行 HTTP 通信。通过 HttpClient、HttpRequest、HttpResponse、HttpEntity、NameValuePair、HttpGet、HttpPost、HttpPut、HttpDelete、HttpClientBuilder、CloseableHttpClient、HttpHost、HttpParams 等组件和功能,开发者可以方便地发送 HTTP 请求、处理响应、管理连接等操作。Apache HttpComponents 提供了灵活、可定制的 API 和机制,使得在 Java 中进行 HTTP 通信变得更加简单和高效。无论是编写网络爬虫、实现 RESTful API 客户端,还是进行 Web 应用程序的测试和调试,org.apache.httpcomponents 都是一个强大而受欢迎的工具集。