现在比较流行Restful api , 所以就跟风写一些api相关的东西,关于 api的定义和基本知识请度娘,主要说一下如何通过java来访问api.
package com.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import net.sf.json.JSONObject;
public class Test{
@SuppressWarnings({ "unchecked", "rawtypes" })
public static String result(String info) {
String requestUrl = "apiurl";
Map params = new HashMap();
params.put("userid", "test");
params.put("info", info);
params.put("password or keys", "test");
String str = httpRequestUrl(requestUrl, params);
JSONObject bean= JSONObject.fromObject(str).getJSONObject("request body");
return bean.getString("text");
}
@SuppressWarnings("rawtypes")
private static String httpRequestUrl(String requestUrl, Map params) {
StringBuffer buffer = new StringBuffer();
try {
URL url = new URL(requestUrl + "?" + urlEncode(params));
HttpURLConnection httpUrlCon = (HttpURLConnection) url.openConnection();
httpUrlCon.setDoInput(true);
httpUrlCon.setRequestMethod("GET/POST/PUT");
httpUrlCon.connect();
InputStream inputStream = httpUrlCon.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
inputStream = null;
httpUrlCon.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return buffer.toString();
}
private static String urlEncode(Map<String, Object> data) {
StringBuilder sb = new StringBuilder();
for (Map.Entry i : data.entrySet()) {
try {
sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue() + "", "UTF-8")).append("&");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
上面的代码是对某个api进行请求, 该api返回json格式的数据, 然后解析json,获得我们想要的数据。
注意以下几点:
访问方式,一般是GET 或者POST
参数方式,一般都是hostname:port/folder?a=xxx&b=xxx
有些需要查看服务器返回的状态码,比如 2xx表示服务器已经收到,3xx在处理,重定向之类的,4xx表示客户端错误 ,比如访问的页面不存在,访问权限不够等,5xx 表示服务器出现了问题,比如解析请求失败 或者是服务器挂了等
代码中打开的连接记得关闭
然后就可以在testng中 调用这个方法进行测试。
如果是第一个api返回的数据要作为第二个api的参数使用,那就需要定义一个全局变量 ,将第一个api的值解析后赋给该全局变量, 然后 第二个api使用 该变量 。