387
阿里云
发送请求示例代码__API介绍_文字识别_人工智能图像类-阿里云
具体原理,参考数加API使用文档
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLConnection;import java.security.MessageDigest;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale;import javax.crypto.spec.SecretKeySpec;import sun.misc.BASE64Encoder;import javax.crypto.Mac;public class Sender {/** 计算MD5+BASE64*/public static String MD5Base64(String s) {if (s == null)return null;String encodeStr = "";byte[] utfBytes = s.getBytes();MessageDigest mdTemp;try {mdTemp = MessageDigest.getInstance("MD5");mdTemp.update(utfBytes);byte[] md5Bytes = mdTemp.digest();BASE64Encoder b64Encoder = new BASE64Encoder();encodeStr = b64Encoder.encode(md5Bytes);} catch (Exception e) {throw new Error("Failed to generate MD5 : " + e.getMessage());}return encodeStr;}/** 计算 HMAC-SHA1*/public static String HMACSha1(String data, String key) {String result;try {// System.out.println("data: " + data);// System.out.println("key: " + key);SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), "HmacSHA1");Mac mac = Mac.getInstance("HmacSHA1");mac.init(signingKey);byte[] rawHmac = mac.doFinal(data.getBytes());result = (new BASE64Encoder()).encode(rawHmac);} catch (Exception e) {throw new Error("Failed to generate HMAC : " + e.getMessage());}return result;}/** 等同于javaScript中的 new Date().toUTCString();*/public static String toGMTString(Date date) {SimpleDateFormat df = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z", Locale.UK);df.setTimeZone(new java.util.SimpleTimeZone(0, "GMT"));return df.format(date);}/** 发送POST请求*/public static String sendPost(String url, String body, String ak_id, String ak_secret) {PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);/** http header 参数*/String method = "POST";String accept = "json";String content_type = "application/json";String path = realUrl.getFile();String date = toGMTString(new Date());// 1.对body做MD5+BASE64加密String bodyMd5 = MD5Base64(body);String stringToSign = method + "n" + accept + "n" + bodyMd5 + "n" + content_type + "n" + date + "n"+ path;// 2.计算 HMAC-SHA1String signature = HMACSha1(stringToSign, ak_secret);// 3.得到 authorization headerString authHeader = "Dataplus " + ak_id + ":" + signature;// 打开和URL之间的连接URLConnection conn = realUrl.openConnection();// 设置通用的请求属性conn.setRequestProperty("accept", accept);conn.setRequestProperty("content-type", content_type);conn.setRequestProperty("date", date);conn.setRequestProperty("Authorization", authHeader);conn.setRequestProperty("Accept-Charset", "UTF-8");// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);// 获取URLConnection对象对应的输出流out = new PrintWriter(conn.getOutputStream());// 发送请求参数out.print(body);// flush输出流的缓冲out.flush();// 定义BufferedReader输入流来读取URL的响应InputStream is;HttpURLConnection httpconn = (HttpURLConnection) conn;if (httpconn.getResponseCode() == 200) {is = httpconn.getInputStream();} else {is = httpconn.getErrorStream();}InputStreamReader sr = new InputStreamReader(is,"utf-8");in = new BufferedReader(sr);String line;while ((line = in.readLine()) != null) {result += line;}} catch (Exception e) {System.out.println("发送 POST 请求出现异常!" + e);e.printStackTrace();}// 使用finally块来关闭输出流、输入流finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}}return result;}}
最后更新:2016-11-24 11:23:48
上一篇:
名片识别__API介绍_文字识别_人工智能图像类-阿里云
下一篇:
篮球动作视频识别__阿里云ET介绍-阿里云
SQL Server不停机迁移__数据迁移_用户指南_数据传输-阿里云
iOS播放器SDK说明__SDK文档及下载_API及SDK_视频直播-阿里云
人工智能产业爆发前夜,阿里云推异构计算产品家族
授权__使用手册(调用API)_API 网关-阿里云
查看应用分组__应用分组_用户指南_云监控-阿里云
Rails应用__Ruby-SDK_SDK 参考_对象存储 OSS-阿里云
报警设置__用户指南_云数据库 Redis 版-阿里云
创建任务(以MaxCompute SQL任务为例)__快速开始_大数据开发套件-阿里云
阿里云帐号注册流程__账号注册_会员帐号及密码_会员账号&实名认证-阿里云
负载均衡计费常见问题___常见问题_负载均衡-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云