HTTP调用接口API实现
1.方法一
- 创建请求对象并使用OkHttpClient发起http请求
在构建请求体的时候,如果用的实体类去封装的请求体内容,则需要在实体类封装完毕后将其转换为json数据
// 构建请求体 JsonRequest jsonRequest = new JsonRequest(); jsonRequest.setModel("wanx-background-generation-v2"); Input input = new Input(); // 设置透明背景的主题头像图片url input.setBase_image_url("https://th.bing.com/th/id/R.f381b337"); // 设置引导图URL ///input.setRef_image_url(""); // 设置引导文本提示词 input.setRef_prompt("布置多个气球,要求现实美观"); // 设置负向提示祠,不希望出现的内容 //input.setNeg_ref_prompt(""); Parameters parameters = new Parameters(); // 设置与引导图的相似度,数值越大,相似度越低,0~999 parameters.setNoise_level("50"); jsonRequest.setInput(input); jsonRequest.setParameters(parameters); // 将实体类转换为json格式 Gson gson = new Gson(); String jsonBody = gson.toJson(jsonRequest);
再通过前面创建的OkHttpClient对象client将请求对象向http发起请求获取响应,最后去解析响应数据里面的json数据,在json数据里面去获取自己想要的内容
try { // 执行请求,将请求对象向http发生请求 Response response = client.newCall(request).execute(); if (response.isSuccessful()) { // 获取响应 String responseBody = response.body().string(); // 解析响应里面的json数据 JsonParser parser = new JsonParser(); JsonObject jsonResponse = parser.parse(responseBody).getAsJsonObject(); // 在json数据里面去提取任务ID String taskId = jsonResponse.getAsJsonObject("output").get("task_id").getAsString(); System.out.println("任务已创建,任务ID: " + taskId); // 等待任务完成并返回修改后的图片路径 imageUrl = waitLoadResults(apiKey, taskId); System.out.println("最终:"+imageUrl); } else { // 处理请求失败的情况 imageUrl = response.message(); } } catch (IOException e) { e.printStackTrace(); }
- 实现过程细节点
实现的流程基本不变,中途的json数据的转换和提取要仔细
- 构建请求体的实体类转换为json数据
// 将实体类jsonRequest转换为json格式 Gson gson = new Gson(); String jsonBody = gson.toJson(jsonRequest);
- 请求响应数据中json数据的解析
// 解析响应responseBody里面的json数据,jsonResponse就是转换后的json数据 JsonParser parser = new JsonParser(); JsonObject jsonResponse = parser.parse(responseBody).getAsJsonObject();
- 在json数据里面提取对应的信息
// 在json数据里面去提取任务ID String taskId = jsonResponse.getAsJsonObject("output").get("task_id").getAsString(); System.out.println("任务已创建,任务ID: " + taskId);
- 提取json数据里面的数组数据([])
// 因为json格式下results里面的url为数组,所以要用jsonArray JsonArray jsonArray = jsonResponse.getAsJsonObject("output").get("results").getAsJsonArray(); for (int i = 0; i<jsonArray.size();i++){ JsonObject jsonObject = jsonArray.get(i).getAsJsonObject(); // 获取图像 URL imageUrl = jsonObject.get("url").getAsString(); }