接口调用-【5】讯飞性别年龄识别

1、直接上代码

package com.day.controller;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
/**
 * 1.年龄识别
 * 2.如果是一个restful接口(json格式),一般将Content-Type设置为application/json; charset=UTF-8
 * 3.如果是文件上传,  一般Content-Type设置为multipart/form-data
 * 4.如果普通表单提交,一般Content-Type设置为application/x-www-form-urlencoded; charset=UTF-8
 */
public class HelloPost {
    public static String url="http://tupapi.xfyun.cn/v1/age";
    public static String APPID = "";
    public static String APIKey = "";
    public static String IMAGE_NAME="src/main/resources/static/1.jpg";
    public static String IMAGE_PATH="src/main/resources/static/1.jpg";
    public static String XCurTime=System.currentTimeMillis() / 1000L + "";
    public static String myParam = "{\"image_name\":\"" + IMAGE_NAME + "\"}";
    public static String checkSum;
    static {
        try {
            checkSum = DigestUtils.md5Hex(APIKey + XCurTime
                    + new String(Base64.encodeBase64(myParam.getBytes("UTF-8"))));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
    /**主函数*/
    public static void main(String args[]){
        String result=sendPost(url,"&key=1&secret=2");
        System.out.println("调用结果 ==》"+result);
    }
    public static String sendPost(String url, String params) {
        PrintWriter printWriter = null;
        BufferedReader bufferedReader = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection myURLConnection = realUrl.openConnection();

            //设置通用的请求属性(Header里的参数)
            myURLConnection.setRequestProperty("accept", "*/*");
            myURLConnection.setRequestProperty("connection", "Keep-Alive");
            myURLConnection.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            /**1.浏览器的原生form表单,一般用于表单提交
             * 2.在 Http Request Header 中配置以下参数*/
            myURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
            myURLConnection.setRequestProperty("X-Appid",APPID);
            myURLConnection.setRequestProperty("X-CurTime",XCurTime);
            myURLConnection.setRequestProperty("X-Param",new String(Base64.encodeBase64(myParam.getBytes("UTF-8"))));
            myURLConnection.setRequestProperty("X-CheckSum",checkSum);
            // 发送POST请求必须设置如下两行
            myURLConnection.setDoOutput(true);
            myURLConnection.setDoInput(true);
            /**1.printWriter:我们一般用来传的是对像
             * 2.而outputStream用来传的是二进制,故上传文件时,一定要使用此。
             * 3.将图片的二进制数据写入 Http Request Body 中*/

            //获取URLConnection对象对应的输出流   发送图片数据
            OutputStream outputStream = myURLConnection.getOutputStream();
            byte[] imageByteArray=read(IMAGE_PATH);
            outputStream.write(imageByteArray);

            // 获取URLConnection对象对应的输出流  发送参数对象
            printWriter = new PrintWriter(outputStream);
            // 发送请求参数
            printWriter.print(params);
            // flush输出流的缓冲
            printWriter.flush();
            printWriter.close();
            outputStream.flush();
            outputStream.close();


            // 定义BufferedReader输入流来读取URL的响应
            bufferedReader = new BufferedReader(
                    new InputStreamReader(myURLConnection.getInputStream()));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                result += line;
            }
        }catch (Exception e) {
            System.out.println("发送 POST 请求出现异常!"+e);
            e.printStackTrace();
        }finally{//使用finally块来关闭输出流、输入流
            try{
                if(printWriter!=null){
                    printWriter.close();
                }
                if(bufferedReader!=null){
                    bufferedReader.close();
                }
            }catch(Exception ex){
                ex.printStackTrace();
            }
        }
        return result;
    }
    /**读取图片或音频文件*/
    public static byte[] read(String filePath) throws IOException {
        InputStream inputStream = new FileInputStream(filePath);
        byte[] data = inputStream2ByteArray(inputStream);
        inputStream.close();
        return data;
    }
    private static byte[] inputStream2ByteArray(InputStream inputStream) throws IOException {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024 * 4];
        int n = 0;
        while ((n = inputStream.read(buffer)) != -1) {
            byteArrayOutputStream.write(buffer, 0, n);
        }
        return byteArrayOutputStream.toByteArray();
    }
    /**判断文件是否是以二进制流存储的*/
    public static boolean isBinary(File file) {
        boolean isBinaryFlag = false;
        FileInputStream fileInputStream=null;
        try {
            fileInputStream = new FileInputStream(file);
            long len = file.length();
            for (int j = 0; j < (int) len; j++) {
                int t = fileInputStream.read();
                if (t < 32 && t != 9 && t != 10 && t != 13) {
                    isBinaryFlag = true;
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try{
                fileInputStream.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        return isBinaryFlag;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值