企业级开发过程中会遇到很多第三方接口api调用的问题,有的公司自己封装了完整的三方接口调用规范,包括我们自己也有,接下来演示一种简单易懂的调用方法。
主要涉及一下几点:
1.打开和url之间的连接 | HttpURLConnection conn = (HttpURLConnection) url.openConnection(); |
2.设置通用的请求属性 | conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); |
---|---|
3.设置是否向httpUrlConnection输出,设置是否从httpUrlConnection读入 | conn.setDoOutput(true); conn.setDoInput(true); |
4.断开连接,最好写上 | conn.disconnect(); |
这是调用完成输出的json格式,这是一个免费的天气接口,当然好多第三方接口是需要去自己注册的,比如百度,阿里,网易等等,里面有完整的接口文档,根据提供的接口文档可以自己编写需要的bean类,封装参数来进行调用
下面看代码,自己可以拿到本地测试一下:
package com.example.consumer.controller;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class InterfaceRequest {
/***
* @Author: GuoYunLong
* @Date: 2019-03-19 15:10
* 调用第三方或者对方接口方法
* @param path 对方或第三方提供的路径
* @param data 向对方或第三方发送的数据,大多数情况下给对方发送JSON数据让对方解析
*/
public static void interfaceDemo(String path, String data) {
try {
URL url = new URL(path);
//打开和url之间的连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
PrintWriter out = null;
//请求方式
//conn.setRequestMethod("POST");
//设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
conn.setDoOutput(true);
conn.setDoInput(true);
//获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
//发送请求参数即数据
out.print(data);
//缓冲数据
out.flush();
//获取URLConnection对象对应的输入流
InputStream is = conn.getInputStream();
//构造一个字符流缓存
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = "";
while ((str = br.readLine()) != null) {
System.out.println(str);
}
//关闭流
is.close();
//断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
//固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
//第三方接口api地址
String path = "https://www.apiopen.top/weatherApi?city=%E7%81%B5%E4%B8%98";
//需要传送的数据
String data = "";
interfaceDemo(path, data);
System.err.println("ok");
}
}