📜  java 发送请求 - Java (1)

📅  最后修改于: 2023-12-03 14:42:18.053000             🧑  作者: Mango

Java 发送请求

在 Java 中,我们经常需要通过发送 HTTP 请求来与网络上的其他应用程序进行交互。Java 提供了多种发送 HTTP 请求的方式,本文将介绍最常用的几种方式。

HttpURLConnection

HttpURLConnection 是 Java 自带的一个基于 HTTP 协议的请求发送器,它是 java.net 包中的一员。以下是一个使用 HttpURLConnection 发送 GET 请求的示例:

import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class HttpExample {
  public static void main(String[] args) {
    try {
      URL url = new URL("https://jsonplaceholder.typicode.com/posts/1");
      HttpURLConnection connection = (HttpURLConnection) url.openConnection();
      connection.setRequestMethod("GET");
      BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
      String line;
      StringBuffer response = new StringBuffer();
      while ((line = reader.readLine()) != null) {
        response.append(line);
      }
      reader.close();
      System.out.println(response.toString());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

使用 HttpURLConnection 还可以发送 POST、PUT、DELETE 等请求,只需修改 setRequestMethod 的参数即可。注意,在发送 POST 请求时需要设置 RequestProperty 来指定请求的 Content-Type。

HttpClient

HttpClient 是 Apache 的一个开源项目,它为我们提供了一个更加高级的 HTTP 客户端,支持多种请求方法、连接池、cookie 管理等功能。以下是一个使用 HttpClient 发送 GET 请求的示例:

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

public class HttpExample {
  public static void main(String[] args) {
    try {
      HttpClient client = HttpClientBuilder.create().build();
      HttpGet request = new HttpGet("https://jsonplaceholder.typicode.com/posts/1");
      org.apache.http.HttpResponse response = client.execute(request);
      String responseBody = EntityUtils.toString(response.getEntity());
      System.out.println(responseBody);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

HttpClient 支持连接池和线程池,可以大幅度提高请求效率。但是需要注意,HttpClient 的 API 版本不兼容,对于 Java 9 以上建议使用 HttpClient 自带的 HttpClient 类。

OkHttp

OkHttp 是 Square 公司开源的一个高效、简单、易用的 HTTP 客户端,它支持 HTTP/2 标准,与 Retrofit 搭配使用可以大幅度提高开发效率。以下是一个使用 OkHttp 发送 GET 请求的示例:

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class HttpExample {
  public static void main(String[] args) {
    try {
      OkHttpClient client = new OkHttpClient();
      Request request = new Request.Builder()
          .url("https://jsonplaceholder.typicode.com/posts/1")
          .build();
      Response response = client.newCall(request).execute();
      System.out.println(response.body().string());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

使用 OkHttp 可以通过链式调用的方式快速设置请求头、参数等信息,十分方便。另外,OkHttp 还支持自动重试、websocket、缓存等功能。

总结

以上是 Java 发送请求的三种方式,具体使用哪种方式取决于具体的需求和项目情况。需要注意的是,在使用 HttpClientOkHttp 的时候需要引入相应的依赖库。