showapi_sdk_java
showapi_sdk_java
需要导入的包
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
普通POST demo
public static void main(String[] args) {
//这里需要替换为你自己的appid和secret,你可以在这里找到 https://www.showapi.com/console#/myApp
String showapi_appid = "XXXXX";
String showapi_sign = "XXXXXXXXXXXXXXX";
//这里的参数在对应接口的页面中查看(接口文档==>二、请求参数==>应用级参数)
String com = "zhongtong";
String nu= "75312165465979";
//拼接接口所需的参数
String paramsStr = "showapi_appid="+showapi_appid+"&showapi_sign="+showapi_sign+"&com=" + com +"&nu="+nu;
//调用接口
String result = sendPost("https://route.showapi.com/64-19",paramsStr,"utf-8");
//得到返回参数
System.out.println(result);
}
/**
*普通post请求接口的方法示例
* @param uri
* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @param charset
* @return
*/
public static String sendPost(String uri, String param, String charset) {
String result = null;
PrintWriter out = null;
InputStream in = null;
try {
URL url = new URL(uri);
HttpURLConnection urlcon = (HttpURLConnection) url.openConnection(); //得到的是URLConnection对象
urlcon.setDoInput(true); // 设置是否从httpUrlConnection读入,默认情况下是true;
urlcon.setDoOutput(true);// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true, 默认情况下是false;
urlcon.setUseCaches(false);// Post 请求不能使用缓存
urlcon.setRequestMethod("POST");
urlcon.connect();// 获取连接
out = new PrintWriter(urlcon.getOutputStream());//获取输出流
out.print(param);
out.flush();
in = urlcon.getInputStream();
BufferedReader buffer = new BufferedReader(new InputStreamReader(in, charset));
StringBuffer bs = new StringBuffer();
String line = null;
while ((line = buffer.readLine()) != null) {
bs.append(line);
}
result = bs.toString();
} catch (Exception e) { System.out.println("[请求异常][地址:" + uri + "][参数:" + e.getMessage() + "]");
} finally {
try {
if (null != in)
in.close();
if (null != out)
out.close();
} catch (Exception e2) {
System.out.println("[关闭流异常][错误信息:" + e2.getMessage() + "]");
}
}
return result;
}
文件POST demo
public static void main(String[] args) {
//这里需要替换为你自己的appid和secret,你可以在这里找到 https://www.showapi.com/console#/myApp
String showapi_appid = "XXXXX";
String showapi_sign = "XXXXXXXXXXXXXXX";
//这里的参数在对应接口的页面中查看(接口文档==>二、请求参数)
//非文件类型的参数放在这里
Map<String, String> params = new HashMap<String, String>();
params.put("showapi_appid",showapi_appid);
params.put("showapi_sign",showapi_sign);
//文件类型的参数放在这里
Map<String, File> files = new HashMap<String, File>();
File file=new File("C:\\Users\\showapi006\\Desktop\\QQ截图20200329125529.png");
files.put("img",file);
//调用接口
String result = filePost("https://route.showapi.com/887-4", params,files);
//得到接口返回的参数
System.out.println(result);
}
/**
*
* @param urlStr http请求路径
* @param params 请求参数
* @param files 上传文件
* @return
*/
public static String filePost(String urlStr, Map<String, String> params,Map<String, File> files) {
InputStream is = null;
String result = "";
// 定义数据分隔线
String BOUNDARY = "========7d4a6d158c9";
try {
URL url = new URL(urlStr);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setConnectTimeout(5000);
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setRequestMethod("POST");// 设置为POST请求
// 设置请求头参数
con.setRequestProperty("Connection", "Keep-Alive");
con.setRequestProperty("Charset", "UTF-8");
con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
StringBuilder sb = handleStrParams(params); //处理非文件类型参数
DataOutputStream dos = new DataOutputStream(con.getOutputStream());
if (sb != null) {
dos.write(sb.toString().getBytes());
}
if (files != null) { //处理文件参数
for (String s : files.keySet()) {
File f = files.get(s);
sb = new StringBuilder();
sb.append("--");
sb.append(BOUNDARY);
sb.append("\r\n");
sb.append("Content-Disposition: form-data; name=\"");
sb.append(s);
sb.append("\"; filename=\"");
sb.append(f.getName());
sb.append("\"\r\n");
sb.append("Content-Type: multipart/form-data");
sb.append("\r\n\r\n");// 参数头设置完以后需要两个换行,然后才是参数内容
dos.write(sb.toString().getBytes());
FileInputStream fis = new FileInputStream(f);
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
dos.write(buffer, 0, len);
}
dos.write("\r\n".getBytes());
fis.close();
}
sb = new StringBuilder();
sb.append("--");
sb.append(BOUNDARY);
sb.append("--\r\n");
dos.write(sb.toString().getBytes());
}
dos.flush();
if (con.getResponseCode() == 200)
is = con.getInputStream();
dos.close();
BufferedReader buffer = new BufferedReader(new InputStreamReader(is, "utf-8"));
StringBuffer bs = new StringBuffer();
String line = null;
while ((line = buffer.readLine()) != null) {
bs.append(line);
}
result = bs.toString();
} catch (Exception e) {
System.out.println("发送POST请求出现异常!" + e);
e.printStackTrace();
}
return result;
}
/**
* 拼接串参数
* @param params
* @return
*/
public static StringBuilder handleStrParams(Map<String, String> params){
if (params == null){
return null;
}
StringBuilder sb = new StringBuilder();
for (String s : params.keySet()) {
sb.append("--");
sb.append("========7d4a6d158c9");
sb.append("\r\n");
sb.append("Content-Disposition: form-data; name=\"");
sb.append(s);
sb.append("\"\r\n\r\n");
sb.append(params.get(s));
sb.append("\r\n");
}
return sb;
}
base64处理 demo
public static void main(String[] args) {
File file = new File("C:/Users/Admin/Desktop/test.png");//需要转换的文件对象
String res=ShowApiRequest.fileToBase64(file); //文件转换后得到的base64
System.out.println(res);
}
/**
*
* @param file
* @return
*/
public static String fileToBase64(File file){
byte[] buffer = null;
try{
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int n;
while ((n = fis.read(b)) != -1)
{
bos.write(b, 0, n);
}
fis.close();
bos.close();
buffer = bos.toByteArray();
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
String str = javax.xml.bind.DatatypeConverter.printBase64Binary(buffer);
return str;
}