HttpURLConnection 学习笔记 - 百度内容审核-图像
Posted 笑虾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpURLConnection 学习笔记 - 百度内容审核-图像相关的知识,希望对你有一定的参考价值。
HttpURLConnection 学习笔记 - 百度内容审核-图像
用到 百度内容审核-图像
看了官方的工作包中使用HttpURLConnection
请求,封装好的工具类用习惯了,很少看里面,撞上了就学习一下吧。
代码
1. 官方的例子
官方例子中还提供了几个工具类,比如HttpUtil
封装好的。可以直接用。
package com.baidu.ai.aip;
import com.baidu.ai.aip.utils.Base64Util;
import com.baidu.ai.aip.utils.FileUtil;
import com.baidu.ai.aip.utils.HttpUtil;
import java.net.URLEncoder;
/**
* 图像审核接口
*/
public class ImgCensor {
/**
* 重要提示代码中所需工具类
* FileUtil,Base64Util,HttpUtil,GsonUtils请从
* https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
* https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
* https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
* https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
* 下载
*/
public static String ImgCensor() {
// 请求url
String url = "https://aip.baidubce.com/rest/2.0/solution/v1/img_censor/v2/user_defined";
try {
// 本地文件路径
String filePath = "[本地文件路径]";
byte[] imgData = FileUtil.readFileByBytes(filePath);
String imgStr = Base64Util.encode(imgData);
String imgParam = URLEncoder.encode(imgStr, "UTF-8");
String param = "image=" + imgParam;
// 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
String accessToken = "[调用鉴权接口获取的token]";
String result = HttpUtil.post(url, accessToken, param);
System.out.println(result);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
ImgCensor.ImgCensor();
}
}
2. 自己的学习代码
虽然官方提供了封装好的工具类,但是自己学习,还是敲一遍的好。
package com.jerry.utils;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.net.*;
/**
* @author jerryjin
* @Classname HttpUtil
* @Date 2021-07-23 14:18
*/
public class HttpUtil {
public static Logger log = LoggerFactory.getLogger(HttpUtil.class);
/**
* POST请求
* @param url 请求地址
* @param params 参数字符串: a=1&b=2&c=3
* @return
*/
public static String doPost(String url, String params) {
HttpURLConnection connection = null;
OutputStream outputStream = null;
InputStream inputStream = null; // 请求返回的数据流
BufferedReader reader = null;
try {
URL _url = new URL(url);
connection = (HttpURLConnection) _url.openConnection();
// 设置请求方式主POST,默认 GET
connection.setRequestMethod("POST");
// 设置连接超时时间为5秒
connection.setConnectTimeout(5000);
// 设置读取超时时间为5秒
connection.setReadTimeout(5000);
// POST请求需要开启输出流,以便将请求参数写入请求体body。开启后方能使用 getOutputStream();默认false
connection.setDoOutput(true);
// 从连接读入,可获得请求返回内容。开启后方能使用 getInputStream();默认true
// connection.setDoInput(true);
// 设置Header
connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
// connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/51.0.2704.7 Safari/537.36");
// 如果有传参
if(null != params) {
// 获取请求的输出流
outputStream = connection.getOutputStream();
// 向请求地址写参数
outputStream.write(params.getBytes());
outputStream.flush();
}
// connection.connect(); // getResponseCode、getOutputStream、getInputStream 都会隐式调用它
// 判断请求Url是否成功
if (connection.getResponseCode() != 200) {
throw new RuntimeException("url请求失败");
}
// 获取返回
inputStream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
String line;
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null) {
sb.append(line);
}
return sb.toString();
} catch (UnsupportedEncodingException e) {
log.error(e.getMessage());
} catch (ProtocolException e) {
log.error(e.getMessage());
} catch (MalformedURLException e) {
log.error(e.getMessage());
} catch (Exception e) {
log.error(e.getMessage());
} finally {
try {
outputStream.close(); // 关闭输出流
inputStream.close(); // 关闭输入流
reader.close(); // 关闭输入流
connection.disconnect(); // 断开连接
} catch (IOException e) {
log.error(e.getMessage());
}
}
return null;
}
public static void main(String[] args) throws Exception {
String url = "https://aip.baidubce.com/rest/2.0/solution/v1/img_censor/v2/user_defined";
String access_token = "24.cd257ec6609688766241ced6fa767cbd.2592000.1629539906.282335-24583045";
String image = "略";
String imgUrl = "http://5b0988e595225.cdn.sohucs.com/images/20171213/c9d1d48cfe454d108920f55e53ec2c2d.jpeg";
// 上传
// File file = new File("D:\\\\baidu_test_img_1.jpg");
// byte[] bytes = Files.readAllBytes(file.toPath());
// String image = Base64.getEncoder().encodeToString(bytes);
JSONObject jsonObject = new JSONObject();
jsonObject.put("access_token", access_token);
jsonObject.put("image", URLEncoder.encode(image,"UTF-8")); // 因为是 application/x-www-form-urlencoded 所以先转码
// jsonObject.put("imgUrl", imgUrl);
String params = jsonObject.toString()
.replace("\\":\\"","=")
.replace("\\",\\"","&")
.replace("{\\"","")
.replace("\\"}","");
System.out.println(params);
String result = HttpUtil.doPost(url, params);
System.out.println(result);
}
}
参考资料
以上是关于HttpURLConnection 学习笔记 - 百度内容审核-图像的主要内容,如果未能解决你的问题,请参考以下文章
Android学习笔记--使用HttpURLConnection实现网络下载效果,附带进度条显示
java调用Http请求 -HttpURLConnection学习
(转)HttpURLConnection与 HttpClient 区别