HttpURLConnection实现
我有一个接口 http://ip:port/Others/airportnew/,采用post方法调用,采用body方式传值,其body内容为{"data": {"data": {"image": ""}}
},现在我需要在java中调用这个接口,帮我写调用方法和测试的main方法
以下是一个使用Java调用该接口的完整示例,包括HttpURLConnection实现和测试main方法:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;public class AirportApiCaller {// 调用接口的核心方法public static String callAirportApi(String apiUrl, String jsonInput) throws IOException {// 创建URL对象URL url = new URL(apiUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();try {// 设置请求参数connection.setRequestMethod("POST");connection.setRequestProperty("Content-Type", "application/json");connection.setRequestProperty("Accept", "application/json");connection.setDoOutput(true);connection.setConnectTimeout(5000); // 5秒连接超时connection.setReadTimeout(10000); // 10秒读取超时// 发送请求体try (OutputStream os = connection.getOutputStream()) {byte[] input = jsonInput.getBytes(StandardCharsets.UTF_8);os.write(input, 0, input.length);}// 获取响应代码int responseCode = connection.getResponseCode();// 读取响应内容try (BufferedReader br = new BufferedReader(new InputStreamReader((responseCode == HttpURLConnection.HTTP_OK) ? connection.getInputStream() : connection.getErrorStream(), StandardCharsets.UTF_8))) {StringBuilder response = new StringBuilder();String responseLine;while ((responseLine = br.readLine()) != null) {response.append(responseLine.trim());}// 返回响应结果(包含状态码和内容)return String.format("HTTP %d: %s", responseCode, response.toString());}} finally {connection.disconnect(); // 确保断开连接}}public static void main(String[] args) {// 接口地址String apiUrl = "http://ip:port/Others/airportnew/";// 构建JSON请求体String jsonBody = "{\"data\":{\"data\":{\"image\":\"\"}}}";try {System.out.println("正在调用机场接口...");String response = callAirportApi(apiUrl, jsonBody);System.out.println("接口响应: " + response);} catch (IOException e) {System.err.println("调用接口时发生错误:");e.printStackTrace();}}
}
使用说明:
-
核心方法:
callAirportApi
- 接收API地址和JSON请求体
- 设置正确的HTTP头(Content-Type: application/json)
- 处理请求和响应流
- 返回包含状态码和响应内容的字符串
-
测试方法:
- 在main方法中直接提供接口URL和请求体
- 自动处理成功/失败的响应
- 包含基本的错误处理
可能的响应处理:
如果接口返回403错误(如之前问题所述),你可能需要添加认证信息。以下是添加认证头的修改示例:
// 在设置请求头的部分添加认证信息
connection.setRequestProperty("Authorization", "Bearer your_token_here");
// 或者
connection.setRequestProperty("x-ais-token", "your_token_value");
依赖说明:
- 纯Java标准库实现(java.net包),无需额外依赖
- 兼容Java 8及以上版本
常见问题排查:
-
如果遇到连接超时:
- 检查IP/端口是否可达(使用
telnet 172.22.1.65 8088
测试) - 调整
setConnectTimeout()
和setReadTimeout()
值
- 检查IP/端口是否可达(使用
-
如果返回403:
- 检查是否需要添加认证头(如x-ais-token)
- 确认服务器IP白名单设置
-
如果JSON格式错误:
- 使用在线JSON校验工具检查
jsonBody
格式 - 确保没有中文引号等非法字符
- 使用在线JSON校验工具检查
建议先用Postman测试确保接口可用,再用此Java代码集成到你的应用中。