httpurlconnection学习笔记-百度内容审核-图像(代码片段)

笑虾 笑虾     2022-12-12     288

关键词:

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与HttpClient比较和使用示例

html学习笔记《一》

  HTML一、简介  1.HTML是超文本标记语言,标准通用标记语言下的一个应用。  2.“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。  3.超文本标记语言的结构包括“头”部分(英语:Head)、... 查看详情

百度前端技术学院-精选笔记-1html学习笔记

以下是我个人的理解,希望得到肯定与指正,在此先感谢各位。而且不说温故知新,看别人的笔记就相当于复习了,记得更牢固。向大家安利四个在线编写页面的网站(在写笔记的时候,千万不要在预览的状态下点击链接,原因... 查看详情

osb学习笔记

OSB安装过程安装OSB集成开发平台(OEPE)安装OSB11g开发平台需要安装两个组件,一个是OEPE,它是基于Eclipse扩展的一个开发工具,用于OSB接口的开发,并且在此安装包内集成了weblogic中间件;另一个是ofm_osb_xxx,这个是OSB服务组件... 查看详情

java学习笔记3.8.2内部类-局部内部类

文章目录零、本讲学习目标一、内部类概述二、局部内部类(一)局部内部类定义(二)局部内部类说明(三)局部内部类案例演示1、创建学校类2、创建测试类零、本讲学习目标理解局部内部类的概念掌握局部内部类的使用一... 查看详情

arcgisjs学习笔记3实现百度风格的bubblepopup

1.开篇模仿是最好的学习,这次我们继续山寨百度,通过自定义Infowindow来实现百度风格的BubblePopup 2.准备2.1Copy模板先打开百度地图,按下f12吧BubblePopup的HTML代码和CSS代码拷贝下来,这里我无耻的把类名改了,大家不要在意细... 查看详情

学习笔记之03做百度搜索页面,未完

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv=" 查看详情

arcgisjs学习笔记2实现仿百度的拖拽画圆

一、前言     吐槽一下,百度在国内除了百度地图是良心产品外,其他的真的不敢恭维。在上一篇笔记里,我已经实现了自定义的地图测量模块。在百度地图里面(其他地图)都有一个周边搜索的功能,拖拽画... 查看详情

docker学习笔记(4-3)docker容器内部署静态网站

Docker学习笔记(4-3)Docker容器内部署静态网站 设置容器的端口映射如何访问容器的80端口《--设置端口映射-P 为所有端口映射 -p指定映射端口dockerrun-p80-i-tubuntu/bin/bashdockerrun-p8080:80-i-tubuntu/bin/bashdockerrun-p0.0.0.0:80-i-tubuntu... 查看详情

机器学习基石笔记无法学习?

天下没有白吃的午餐,从样本内到样本外永远无法估计。抽样的话,样本内频率和样本外概率相等PAC(probablyapproximatelycorrect) 一个重要的事情是样本要在总体分布中取。Ein(h)=sum(isSame(yHatn,yn))只要N足够大,Ein和Eout就很接近... 查看详情

springboot学习笔记内嵌tomcat和springmvc(代码片段)

springBoot学习笔记(五)内嵌tomcat和springmvc源码剖析内嵌tomcattomcat自动配置类ServletWebServerFactoryAutoConfigurationSpringBoot启动内置tomcat流程getWebServer方法的调用springmvc自动配置(一)自动配置DispatcherServlet和DispatcherServlet... 查看详情

拿到百度前端大佬整理的学习笔记,帮我搞定90%的前端面试!

前言激动的心颤抖的手,看着百度大佬整理的学习,嘴巴都要笑裂开了,别问哪来的,问就是我有个朋友哈哈哈哈哈。本着独乐乐不如众乐乐的心,小编把这份学习笔记分享出来,一起感受百度前端大佬的... 查看详情

css学习笔记

CSS常用帮助文档CSS:被用来同时控制多重网页的样式和布局。HTML页面中CSS样式的写法有3种: 1:标签中写入   <bodystyle=‘marginoauto;‘> 2:head头标签内   <style>     body{margin:0auto;}   </style> 3:head头标... 查看详情

百度飞浆ai创造营学习笔记

创意本期的第一课主要是创意的来源,三位小哥哥讲述了创意来源,思路和最后的验证,都可以落地,很有意思,对于我这样的小白很有启发。组合各种图像、以及语言,视频的拼接等。复刻游戏复刻特效... 查看详情

60分钟内从零起步驾驭hive实战学习笔记

 本博文的主要内容是:  1. Hive本质解析  2. Hive安装实战  3. 使用Hive操作搜索引擎数据实战   SparkSQL前身是Shark,Shark强烈依赖于Hive。Spark原来没有做SQL多维度数据查询工具,后来开发了Shark,Shark依... 查看详情

esp8266学习笔记2:实现esp8266的局域网内通信

上一篇熟悉了编译下载操作。如今就以实例入手。project使用的是IOT_DEMO,据DEMO文档能够知道ESP8266初始工作模式为softAP+station共存的模式。于是这边我们就先以softAP入手。研究下局域网内的通信。转载请注明:http://blog.csdn.net/sadsh... 查看详情

jmeter学习笔记2-原件作用域与执行顺序

1.元件的作用域 (1)配置元件(configelements):会影响其作用范围内的所有元件。(2)前置处理程序(per-processors):在其作用范围内的每一个sampler元件之前执行。(3)定时器(timers):对其作用范围内的每一个sampler有效。... 查看详情

canvas学习笔记

canvas是HTML5的新标签,一般称为“画布”,通过js代码在这个“画布”上制作各种各样的图形、绚丽的效果等等。现在开始一步一步了解canvas:首先,需要在html中添加一个<canvasid=‘firstCanvas‘></canvas>,一般来说,我们可... 查看详情

汇编入门学习笔记——转移指令

疯狂的暑假学习之 汇编入门学习笔记(八)—— 转移指令參考:《汇编语言》王爽第9章能够改动ip或者同一时候改动cs和ip的指令统称为转移指令。8086CPU转移行为分为:段内转移:仅仅改动ip段间转移:同一时候改动cs和... 查看详情