java发起网络请求远程服务
时间: 2025-06-16 14:27:41 浏览: 0
<think>我们被要求提供Java发起网络请求调用远程服务的示例代码。根据引用内容,我们可以使用Java内置的HttpURLConnection或第三方库如OkHttp。下面将分别展示这两种方式。###方法1:使用Java内置的HttpURLConnection(适用于简单请求)```javaimportjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;importjava.net.URL;publicclassHttpExample{publicstaticvoidmain(String[]args){try{//1.创建URL对象URLurl=newURL("http://example.com/api");//2.打开连接HttpURLConnectionconnection=(HttpURLConnection)url.openConnection();//3.设置请求方法(GET/POST等)connection.setRequestMethod("GET");//4.设置连接和读取超时(单位:毫秒)connection.setConnectTimeout(5000);connection.setReadTimeout(5000);//5.可选:设置请求头connection.setRequestProperty("User-Agent","Mozilla/5.0");connection.setRequestProperty("Accept","application/json");//6.建立连接connection.connect();//7.获取响应码intresponseCode=connection.getResponseCode();System.out.println("ResponseCode:"+responseCode);//8.读取响应内容(成功时)if(responseCode==HttpURLConnection.HTTP_OK){InputStreaminputStream=connection.getInputStream();BufferedReaderreader=newBufferedReader(newInputStreamReader(inputStream));Stringline;StringBuilderresponse=newStringBuilder();while((line=reader.readLine())!=null){response.append(line);}reader.close();System.out.println("Response:"+response.toString());}else{System.out.println("Requestfailed");}//9.断开连接connection.disconnect();}catch(Exceptione){e.printStackTrace();}}}```###方法2:使用OkHttp(推荐,更简洁高效)首先添加OkHttp依赖(Maven):```xml<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.3</version></dependency>```示例代码:```javaimportokhttp3.OkHttpClient;importokhttp3.Request;importokhttp3.Response;publicclassOkHttpExample{publicstaticvoidmain(String[]args){OkHttpClientclient=newOkHttpClient();Requestrequest=newRequest.Builder().url("http://example.com/api").get().addHeader("User-Agent","OkHttpExample").build();try(Responseresponse=client.newCall(request).execute()){if(response.isSuccessful()&&response.body()!=null){System.out.println("Response:"+response.body().string());}else{System.out.println("Requestfailed:"+response.code());}}catch(Exceptione){e.printStackTrace();}}}```###POST请求示例(使用OkHttp发送JSON数据)```javaimportokhttp3.*;publicclassOkHttpPostExample{publicstaticvoidmain(String[]args){OkHttpClientclient=newOkHttpClient();MediaTypeJSON=MediaType.parse("application/json;charset=utf-8");StringjsonBody="{\"name\":\"John\",\"age\":30}";RequestBodybody=RequestBody.create(jsonBody,JSON);Requestrequest=newRequest.Builder().url("http://example.com/api/post").post(body).addHeader("Content-Type","application/json").build();try(Responseresponse=client.newCall(request).execute()){System.out.println(response.body().string());}catch(Exceptione){e.printStackTrace();}}}```###关键说明1.**请求方法**:通过`setRequestMethod()`(HttpURLConnection)或`.get()/.post()`(OkHttp)设置2.**超时控制**:HttpURLConnection使用`setConnectTimeout()`和`setReadTimeout()`,OkHttp通过`OkHttpClient.Builder()`配置3.**请求头**:使用`setRequestProperty()`(HttpURLConnection)或`addHeader()`(OkHttp)4.**异常处理**:网络请求必须捕获`IOException`5.**资源释放**:确保关闭输入流和断开连接(HttpURLConnection)或使用try-with-resources(OkHttp)###注意事项-生产环境中建议使用连接池和超时配置优化性能-处理HTTPS时需要配置SSL(OkHttp默认支持)-大文件下载建议使用流式传输避免内存溢出###相关问题1.如何用Java实现异步HTTP请求?2.如何处理HTTP请求中的重定向?3.如何用Java发送带文件上传的POST请求?4.OkHttp和HttpClient哪个性能更好?[^1]:[OkHttp官方网站](https://square.github.io/okhttp/)[^2]:[Java官方HttpURLConnection文档](https://docs.oracle.com/javase/8/docs/api/java/net/HttpURLConnection.html)</think>### Java 发起网络请求调用远程服务示例代码
在 Java 中发起网络请求主要有三种主流方式:原生 `HttpURLConnection`、Apache HttpClient 和 OkHttp。以下是详细示例:
---
### 1. 使用原生 HttpURLConnection (Java 标准库)
```java
import java.io.*;
import java.net.*;
public class HttpURLConnectionExample {
public static void main(String[] args) {
String url = "https://api.example.com/data";
try {
// 1. 创建连接
URL apiUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) apiUrl.openConnection();
// 2. 设置请求方法
conn.setRequestMethod("GET");
// 3. 设置请求头
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Authorization", "Bearer your_token");
// 4. 设置超时时间(毫秒)
conn.setConnectTimeout(5000);
conn.setReadTimeout(10000);
// 5. 获取响应
int status = conn.getResponseCode();
if (status == 200) { // HTTP_OK
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream()))) {
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
System.out.println("响应结果: " + response.toString());
}
} else {
System.err.println("请求失败,状态码: " + status);
}
// 6. 关闭连接
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
---
### 2. 使用 Apache HttpClient (Maven依赖)
```xml
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
```
```java
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import org.apache.http.util.EntityUtils;
public class HttpClientExample {
public static void main(String[] args) {
String url = "https://api.example.com/data";
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
// 1. 创建GET请求
HttpGet request = new HttpGet(url);
// 2. 设置请求头
request.setHeader("Content-Type", "application/json");
request.setHeader("Authorization", "Bearer your_token");
// 3. 执行请求
try (CloseableHttpResponse response = httpClient.execute(request)) {
int status = response.getStatusLine().getStatusCode();
if (status == 200) {
String result = EntityUtils.toString(response.getEntity());
System.out.println("响应结果: " + result);
} else {
System.err.println("请求失败,状态码: " + status);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
---
### 3. 使用 OkHttp (推荐,Maven依赖)
```xml
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.3</version>
</dependency>
```
```java
import okhttp3.*;
public class OkHttpExample {
public static void main(String[] args) {
String url = "https://api.example.com/data";
OkHttpClient client = new OkHttpClient();
// 1. 创建请求
Request request = new Request.Builder()
.url(url)
.header("Content-Type", "application/json")
.header("Authorization", "Bearer your_token")
.build();
// 2. 发送请求
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
String result = response.body().string();
System.out.println("响应结果: " + result);
} else {
System.err.println("请求失败,状态码: " + response.code());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
---
### POST 请求示例 (使用 OkHttp)
```java
// 创建 JSON 请求体
String json = "{\"name\":\"John\", \"age\":30}";
RequestBody body = RequestBody.create(json, MediaType.parse("application/json"));
Request postRequest = new Request.Builder()
.url("https://api.example.com/submit")
.post(body) // 设置 POST 方法
.build();
try (Response response = client.newCall(postRequest).execute()) {
// 处理响应...
}
```
---
### 关键注意事项
1. **异常处理**:网络请求必须处理 `IOException`
2. **资源释放**:确保关闭连接和响应资源(使用 try-with-resources)
3. **超时设置**:
```java
// OkHttp 超时配置
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
```
4. **HTTPS 支持**:所有现代库都支持 HTTPS,无需额外配置
5. **性能对比**:
- `HttpURLConnection`:标准库,无需依赖
- Apache HttpClient:功能最全面
- OkHttp:性能最优,现代应用首选[^1]
---
### 相关问题
1. 如何处理 HTTP 请求的异步调用?
2. 如何用 Java 实现文件上传的 POST 请求?
3. 网络请求中如何正确处理重定向?
4. 如何为 Java 网络请求添加重试机制?
5. 不同 HTTP 客户端库的性能对比指标有哪些?
[^1]: [OkHttp 官方文档](https://square.github.io/okhttp/)
[^2]: [Java 官方网络编程文档](https://docs.oracle.com/javase/tutorial/networking/)
阅读全文
相关推荐












