在Java中,发送HTTP请求是一项常见的任务,可以使用多种库来实现,包括标准库中的HttpURLConnection
,以及第三方库如Apache HttpClient和OkHttp。下面分别介绍这三种方法,并提供示例代码。
1. 使用 HttpURLConnection
HttpURLConnection
是Java标准库提供的一个类,用于发送HTTP请求。虽然它的功能不如第三方库强大,但它足够简单且轻量级。
示例:GET请求
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpUrlConnectionExample {
public static void main(String[] args) {
try {
URL url = new URL("https://api.example.com/data");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
// 设置请求头(可选)
connection.setRequestProperty("User-Agent", "Java HTTPURLConnection");
// 获取响应码
int responseCode = connection.getResponseCode();
System.out.println("Response Code: " + responseCode);
// 读取响应内容
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder content = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
System.out.println("Response Content: " + content.toString());
} else {
System.out.println("GET request failed.");
}
// 断开连接
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
示例:POST请求
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpUrlConnectionPostExample {
public static void main(String[] args) {
try {
URL url = new URL("https://api.example.com/data");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json; utf-8");
connection.setRequestProperty("Accept", "application/json");
connection.setDoOutput(true);
String jsonInputString = "{\"key\":\"value\"}";
try (OutputStream os = connection.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}
int responseCode = connection.getResponseCode();
System.out.println("Response Code: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder content = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
System.out.println("Response Content: " + content.toString());
} else {
System.out.println("POST request failed.");
}
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2. 使用 Apache HttpClient
Apache HttpClient 是一个功能强大的HTTP客户端库,支持复杂的HTTP请求和响应处理。
示例:GET请求
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class HttpClientExample {
public static void main(String[] args) {
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpGet httpGet = new HttpGet("https://api.example.com/data");
// 设置请求头(可选)
httpGet.setHeader("User-Agent", "Apache HttpClient");
try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("Response Code: " + statusCode);
if (statusCode == 200) {
String responseString = EntityUtils.toString(response.getEntity());
System.out.println("Response Content: " + responseString);
} else {
System.out.println("GET request failed.");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
示例:POST请求
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class HttpClientPostExample {
public static void main(String[] args) {
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpPost httpPost = new HttpPost("https://api.example.com/data");
// 设置请求头(可选)
httpPost.setHeader("Content-Type", "application/json");
httpPost.setHeader("Accept", "application/json");
// 设置请求体
String jsonInputString = "{\"key\":\"value\"}";
StringEntity entity = new StringEntity(jsonInputString);
httpPost.setEntity(entity);
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("Response Code: " + statusCode);
if (statusCode == 200) {
String responseString = EntityUtils.toString(response.getEntity());
System.out.println("Response Content: " + responseString);
} else {
System.out.println("POST request failed.");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3. 使用 OkHttp
OkHttp 是一个现代、高效的HTTP客户端库,广泛用于Android和Java应用程序。
示例:GET请求
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class OkHttpExample {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.example.com/data")
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
String responseBody = response.body().string();
System.out.println("Response Content: " + responseBody);
} else {
System.out.println("GET request failed.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
示例:POST请求
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class OkHttpPostExample {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
MediaType JSON = MediaType.get("application/json; charset=utf-8");
String jsonInputString = "{\"key\":\"value\"}";
RequestBody body = RequestBody.create(jsonInputString, JSON);
Request request = new Request.Builder()
.url("https://api.example.com/data")
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
String responseBody = response.body().string();
System.out.println("Response Content: " + responseBody);
} else {
System.out.println("POST request failed.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
总结
以上介绍了三种常用的Java库来发送HTTP请求:HttpURLConnection
、Apache HttpClient 和 OkHttp。每种方法都有其优缺点,选择合适的库取决于你的具体需求。希望这些示例代码能够帮助你更好地理解和使用这些库。如果有任何进一步的问题或需要更多的帮助,请随时告知!