static String generateParameters(Map<String,String>map){
List<NameValuePair>list = Lists.newArrayList();
for(String key : map.keySet()){
list.add(new BasicNameValuePair(key, map.get(key)));
}
return URLEncodedUtils.format(list, Charset.defaultCharset());
}
生成参数列表,参数以map的key-value形式传入,URLEncodeUtils.format会自动把参数以xx=xx&的形式连接起来,并且value还会被URLEncoder过
static URI generateUri(String finalUrl,String parameters) throws URISyntaxException{
if(parameters == null){
return new URI(finalUrl);
}
return new URI(finalUrl+"?"+parameters);
}
生成uri,参数是url和参数列表,这里返回URI是为了能让思路更清晰
static CloseableHttpResponse connect(URI uri) throws ClientProtocolException, IOException{
CloseableHttpClient client = HttpClients.createDefault();
HttpGet get = new HttpGet(uri);
return client.execute(get);
}
发送http请求并返回response相应。调用了httpclient的方法
static String parseHttpResponse(CloseableHttpResponse response , Charset charset) throws UnsupportedOperationException, IOException{
String line = null;
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), charset));
line = reader.readLine();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(response != null)
response.close();
}
return line;
}
解析相应并获取正文字符串。参数是response和charset,这里传入response参数是为了可以在方法中关闭response而不用放到外面关闭,简化了操作。charset是为了匹配目标网站用的charset,不至于解析完毕后发现结果包含乱码。
分这几步其实就是一个增加代码复用度的思想,如果我把这些代码都写在一个方法中,那以后要改就会全盘修改代码,甚至修改调用该方法的方法,那觉得是一件很不好的事情。而用这种分部的方式,会让思路更清晰,代码耦合度更低,可以随时互相搭配着用,效率相对高。
如果不写在util里,也可以写在一个父类AbstractService里,以便service子类调用这些方法