1.Get请求
public static String httpGetCallbackData(String url, List<NameValuePair> params) {
BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager();
CloseableHttpClient httpclient = HttpClients.custom()
.setConnectionManager(connManager)
.build();
String entityStr = null;
CloseableHttpResponse response = null;
try {
URIBuilder uriBuilder = new URIBuilder(url);
uriBuilder.setParameters(params);
HttpGet httpGet = new HttpGet(uriBuilder.build());
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(5000)
.setConnectTimeout(50000)
.setConnectionRequestTimeout(50000)
.build();
httpGet.setConfig(requestConfig);
httpGet.setHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8");
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36");
response = httpclient.execute(httpGet);
HttpEntity entity = response.getEntity();
entityStr = EntityUtils.toString(entity, "UTF-8");
} catch (ClientProtocolException e) {
System.err.println("Http协议出现问题");
e.printStackTrace();
} catch (ParseException e) {
System.err.println("解析错误");
e.printStackTrace();
} catch (URISyntaxException e) {
System.err.println("URI解析异常");
e.printStackTrace();
} catch (IOException e) {
System.err.println("IO异常");
e.printStackTrace();
} finally {
if (null != response) {
try {
response.close();
httpclient.close();
} catch (IOException e) {
System.err.println("释放连接出错:"+e.getMessage());
}
}
}
return entityStr;
}
2.Post请求
public static String httpPostCallbackData(String url, List<NameValuePair> params) {
BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager();
CloseableHttpClient httpclient = HttpClients.custom()
.setConnectionManager(connManager)
.build();
String entityStr = null;
CloseableHttpResponse response = null;
try {
HttpPost httpPost = new HttpPost(url);
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(5000)
.setConnectTimeout(50000)
.setConnectionRequestTimeout(50000)
.build();
httpPost.setConfig(requestConfig);
httpPost.setHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8");
httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36");
HttpEntity httpEntity = new UrlEncodedFormEntity(params,"UTF-8");
httpPost.setEntity(httpEntity);
response = httpclient.execute(httpPost);
HttpEntity entity = response.getEntity();
entityStr = EntityUtils.toString(entity, "UTF-8");
} catch (ClientProtocolException e) {
System.err.println("Http协议出现问题:"+e.getMessage());
} catch (ParseException e) {
System.err.println("解析错误:"+e.getMessage());
} catch (IOException e) {
System.err.println("IO异常:"+e.getMessage());
} finally {
if (null != response) {
try {
response.close();
httpclient.close();
} catch (IOException e) {
System.err.println("释放连接出错"+e.getMessage());
}
}
}
return entityStr;
}
案例分析(爬取歌曲信息)
- (1).java中的下载歌曲函数代码块MusicDownload
public class MusicDownload {
public static String httpGetCallbackData(String url, List<NameValuePair> params) {
BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager();
CloseableHttpClient httpclient = HttpClients.custom()
.setConnectionManager(connManager)
.build();
String entityStr = null;
CloseableHttpResponse response = null;
try {
URIBuilder uriBuilder = new URIBuilder(url);
uriBuilder.setParameters(params);
HttpGet httpGet = new HttpGet(uriBuilder.build());
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(5000)
.setConnectTimeout(50000)
.setConnectionRequestTimeout(50000)
.build();
httpGet.setConfig(requestConfig);
httpGet.setHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8");
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36");
response = httpclient.execute(httpGet);
HttpEntity entity = response.getEntity();
entityStr = EntityUtils.toString(entity, "UTF-8");
} catch (ClientProtocolException e) {
System.err.println("Http协议出现问题");
e.printStackTrace();
} catch (ParseException e) {
System.err.println("解析错误");
e.printStackTrace();
} catch (URISyntaxException e) {
System.err.println("URI解析异常");
e.printStackTrace();
} catch (IOException e) {
System.err.println("IO异常");
e.printStackTrace();
} finally {
if (null != response) {
try {
response.close();
httpclient.close();
} catch (IOException e) {
System.err.println("释放连接出错:"+e.getMessage());
}
}
}
return entityStr;
}
public static String httpPostCallbackData(String url, List<NameValuePair> params) {
BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager();
CloseableHttpClient httpclient = HttpClients.custom()
.setConnectionManager(connManager)
.build();
String entityStr = null;
CloseableHttpResponse response = null;
try {
HttpPost httpPost = new HttpPost(url);
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(5000)
.setConnectTimeout(50000)
.setConnectionRequestTimeout(50000)
.build();
httpPost.setConfig(requestConfig);
httpPost.setHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8");
httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36");
HttpEntity httpEntity = new UrlEncodedFormEntity(params,"UTF-8");
httpPost.setEntity(httpEntity);
response = httpclient.execute(httpPost);
HttpEntity entity = response.getEntity();
entityStr = EntityUtils.toString(entity, "UTF-8");
} catch (ClientProtocolException e) {
System.err.println("Http协议出现问题:"+e.getMessage());
} catch (ParseException e) {
System.err.println("解析错误:"+e.getMessage());
} catch (IOException e) {
System.err.println("IO异常:"+e.getMessage());
} finally {
if (null != response) {
try {
response.close();
httpclient.close();
} catch (IOException e) {
System.err.println("释放连接出错"+e.getMessage());
}
}
}
return entityStr;
}
public static String getMusic(String key,String pn,String rn) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("key", key));
params.add(new BasicNameValuePair("pn",pn));
params.add(new BasicNameValuePair("rn", rn));
String music_information = MusicDownload.httpGetCallbackData("http://www.kuwo.cn/api/www/search/searchMusicBykeyWord", params);
JSONObject parseObject = JSONObject.parseObject(music_information);
String data = parseObject.getString("data");
JSONObject music_data = JSONObject.parseObject(data);
String list = music_data.getString("list");
JSONArray music_list = JSONObject.parseArray(list);
return music_list.toString();
}
public static String getMusicUrl(String rid) {
List<NameValuePair> params2 = new ArrayList<NameValuePair>();
params2.add(new BasicNameValuePair("format", "mp3"));
params2.add(new BasicNameValuePair("rid", rid));
params2.add(new BasicNameValuePair("response", "url"));
params2.add(new BasicNameValuePair("type", "convert_url3"));
params2.add(new BasicNameValuePair("br", "128kmp3"));
params2.add(new BasicNameValuePair("from", "web"));
String musicStr = MusicDownload.httpGetCallbackData("http://www.kuwo.cn/url?format=mp3", params2);
JSONObject music = JSONObject.parseObject(musicStr);
String musicUrl = music.getString("url");
return musicUrl;
}
public static void downLoadMusic(String musicUrl ,String musicName) {
try {
URL url = new URL(musicUrl);
URLConnection openConnection = url.openConnection();
InputStream is = openConnection.getInputStream();
int len = 0;
byte[] b = new byte[1024*8];
OutputStream os = new FileOutputStream("D:\\Java课程设计\\kwMusic\\"+musicName);
while((len = is.read(b)) != -1 ) {
os.write(b, 0, len);
}
System.out.println("歌曲下载完成:下载路径是 -->"+"D:\\\\Java课程设计\\\\kwMusic\\"+musicName);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println("开始进行下载歌曲...");
long currentTimeMillis_1 = System.currentTimeMillis();
String music = MusicDownload.getMusic("许嵩","1","12");
JSONArray music_array = JSONObject.parseArray(music);
for (int i = 0; i < music_array.size(); i++) {
JSONObject list = music_array.getJSONObject(i);
String rid = list.getString("rid");
String artist = list.getString("artist");
String name = list.getString("name");
String album = list.getString("album");
String url = MusicDownload.getMusicUrl(rid);
}
long currentTimeMillis_2 = System.currentTimeMillis();
long time = currentTimeMillis_2 - currentTimeMillis_1;
System.out.println("歌曲下载完成:总共所需时间为"+time+" Millis");
}
}
- (2).JSP代码块中的主播放器页面index.jsp
<%@ page import="com.hugong.downloadDemo01.MusicDownload" %>
<%@ page import="com.alibaba.fastjson.JSONObject" %>
<%@ page import="com.alibaba.fastjson.JSONArray" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>湖工播放器</title>
<link rel='stylesheet' href='js/jquery-3.2.1.min.js'>
<!-- Bootstrap -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="js/jquery-3.2.1.min.js"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="js/bootstrap.min.js"></script>
<style>
body{
}
div{
margin: auto;
}
.all{
width: 800px;
height: 100%;
border: 2px red ;
}
.div_head{
width: 800px;
background: #DBB586;
color: #DBB586;
}
.list{
float: right;
}
</style>
</head>
<body>
<!-- 盒子模型 -->
<div class="all">
<!-- 导航栏 -->
<div class="div_head">
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- 首页 -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.jsp">首页</a>
</div>
<!-- 搜索框 -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<form class="navbar-form navbar-left">
<div class="form-group">
<input type="text" class="form-control" placeholder="请输入任意歌手名、歌名" name="key">
</div>
<button type="submit" class="btn btn-default">搜索</button>
</form>
<ul class="nav navbar-nav navbar-right">
<%--<li><a href="index_example2.jsp?key=<%=key %>&pn=<%=(pn-1)%>&rn=4">上一页</a>  </li>--%>
<%--<li><a href="index_example2.jsp?key=<%=key %>&pn=<%=(pn+1)%>&rn=4">下一页</a>  </li>--%>
<li><a href="index.jsp">返回</a></li>
</ul>
</div>
</div>
</nav>
</div>
<!-- 所有歌曲信息 -->
<div>
<%--<table class="table table-hover" >--%>
<table class="table table-hover" >
<!-- 列表头 -->
<tr>
<td>序列号</td>
<td>歌曲封面</td>
<td>歌曲名</td>
<td>歌手</td>
<td>专辑</td>
<td>在线播放</td>
</tr>
<!-- 每一首首歌曲 -->
<%
String key = request.getParameter("key");
String pnStr = request.getParameter("pn");
int pn = 1;
if(pnStr != null && !"".equals(pnStr)){
pn = Integer.parseInt(pnStr);
}
if(key == null || "".equals(key)){
key = "周杰伦";
}
String jsonStr = MusicDownload.getMusic(key, pnStr, "4");
JSONArray jsonArray = JSONObject.parseArray(jsonStr);
JSONArray array = new JSONArray();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String rid = jsonObject.getString("rid");
String name = jsonObject.getString("name");
String artist = jsonObject.getString("artist");
String pic = jsonObject.getString("pic120");
String album = jsonObject.getString("album");
String musicUrl = MusicDownload.getMusicUrl(rid);
out.write("<td>"+(i+1)+"</td>");
out.write("<td><img src='"+pic+"' alt='图片未找到'/></td>");
JSONObject musicJson = new JSONObject();
musicJson.fluentPut("name", artist+"-"+name);
musicJson.fluentPut("pic", pic);
musicJson.fluentPut("musicUrl", musicUrl);
System.out.println(musicJson);
array.add(musicJson);
out.write("<td>");
out.write("<form action='music_1.jsp' method='post' target='_blank'>");
out.write("<input type='hidden' value='["+musicJson.toString()+"]' name='musicJson'/>");
out.write("<input type='submit' value='"+name+"'>");
out.write("</form>");
out.write("</td>");
out.write("<td>"+artist+"</td>");
out.write("<td>"+album+"</td>");
out.write("<td><audio src='"+musicUrl+"' controls='true'></audio></td>");
out.write("</tr>");
}
%>
</table>
<!-- 分页栏 -->
<tr align="center">
<!-- colspan="6":将5列进行合并 -->
<td colspan="6">
<div align="center">
<nav aria-label="...">
<!-- 分页栏 -->
<ul class="pager">
<a href="index.jsp?key=<%=key %>&pn=1&rn=4">首页</a>
<li><a href="index.jsp?key=<%=key %>&pn=<%=(pn-1)%>&rn=4">上一页</a>  </li>
<li><a href="index.jsp?key=<%=key %>&pn=<%=(pn+1)%>&rn=4">下一页</a>  </li>
<li class="list">
<form action="music_1.jsp" method="post" target="_blank" class="navbar-form navbar-left" role="search">
<div class="form-group">
<input type="hidden" value='<%=array.toString() %>' name="musicJson" class="form-control" placeholder="Search">
</div>
<input type="submit" class="btn btn-default" value="将本页加入播放列表">
</form>
</li>
</ul>
</nav>
</div>
</td>
</tr>
</div>
</div>
</body>
</html>
- (3).播放音乐时显示代码块music_1.jsp
<%@ page import="com.hugong.downloadDemo01.MusicDownload" %>
<%@ page import="com.alibaba.fastjson.JSONObject" %>
<%@ page import="com.alibaba.fastjson.JSONArray" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>湖工播放器</title>
<link rel='stylesheet' href='js/jquery-3.2.1.min.js'>
<!-- Bootstrap -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="js/jquery-3.2.1.min.js"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="js/bootstrap.min.js"></script>
<style>
body{
}
div{
margin: auto;
}
.all{
width: 800px;
height: 100%;
border: 2px red ;
}
.div_head{
width: 800px;
background: #DBB586;
color: #DBB586;
}
.list{
float: right;
}
</style>
</head>
<body>
<!-- 盒子模型 -->
<div class="all">
<!-- 导航栏 -->
<div class="div_head">
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- 首页 -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.jsp">首页</a>
</div>
<!-- 搜索框 -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<form class="navbar-form navbar-left">
<div class="form-group">
<input type="text" class="form-control" placeholder="请输入任意歌手名、歌名" name="key">
</div>
<button type="submit" class="btn btn-default">搜索</button>
</form>
<ul class="nav navbar-nav navbar-right">
<%--<li><a href="index_example2.jsp?key=<%=key %>&pn=<%=(pn-1)%>&rn=4">上一页</a>  </li>--%>
<%--<li><a href="index_example2.jsp?key=<%=key %>&pn=<%=(pn+1)%>&rn=4">下一页</a>  </li>--%>
<li><a href="index.jsp">返回</a></li>
</ul>
</div>
</div>
</nav>
</div>
<!-- 所有歌曲信息 -->
<div>
<%--<table class="table table-hover" >--%>
<table class="table table-hover" >
<!-- 列表头 -->
<tr>
<td>序列号</td>
<td>歌曲封面</td>
<td>歌曲名</td>
<td>歌手</td>
<td>专辑</td>
<td>在线播放</td>
</tr>
<!-- 每一首首歌曲 -->
<%
String key = request.getParameter("key");
String pnStr = request.getParameter("pn");
int pn = 1;
if(pnStr != null && !"".equals(pnStr)){
pn = Integer.parseInt(pnStr);
}
if(key == null || "".equals(key)){
key = "周杰伦";
}
String jsonStr = MusicDownload.getMusic(key, pnStr, "4");
JSONArray jsonArray = JSONObject.parseArray(jsonStr);
JSONArray array = new JSONArray();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String rid = jsonObject.getString("rid");
String name = jsonObject.getString("name");
String artist = jsonObject.getString("artist");
String pic = jsonObject.getString("pic120");
String album = jsonObject.getString("album");
String musicUrl = MusicDownload.getMusicUrl(rid);
out.write("<td>"+(i+1)+"</td>");
out.write("<td><img src='"+pic+"' alt='图片未找到'/></td>");
JSONObject musicJson = new JSONObject();
musicJson.fluentPut("name", artist+"-"+name);
musicJson.fluentPut("pic", pic);
musicJson.fluentPut("musicUrl", musicUrl);
System.out.println(musicJson);
array.add(musicJson);
out.write("<td>");
out.write("<form action='music_1.jsp' method='post' target='_blank'>");
out.write("<input type='hidden' value='["+musicJson.toString()+"]' name='musicJson'/>");
out.write("<input type='submit' value='"+name+"'>");
out.write("</form>");
out.write("</td>");
out.write("<td>"+artist+"</td>");
out.write("<td>"+album+"</td>");
out.write("<td><audio src='"+musicUrl+"' controls='true'></audio></td>");
out.write("</tr>");
}
%>
</table>
<!-- 分页栏 -->
<tr align="center">
<!-- colspan="6":将5列进行合并 -->
<td colspan="6">
<div align="center">
<nav aria-label="...">
<!-- 分页栏 -->
<ul class="pager">
<a href="index.jsp?key=<%=key %>&pn=1&rn=4">首页</a>
<li><a href="index.jsp?key=<%=key %>&pn=<%=(pn-1)%>&rn=4">上一页</a>  </li>
<li><a href="index.jsp?key=<%=key %>&pn=<%=(pn+1)%>&rn=4">下一页</a>  </li>
<li class="list">
<form action="music_1.jsp" method="post" target="_blank" class="navbar-form navbar-left" role="search">
<div class="form-group">
<input type="hidden" value='<%=array.toString() %>' name="musicJson" class="form-control" placeholder="Search">
</div>
<input type="submit" class="btn btn-default" value="将本页加入播放列表">
</form>
</li>
</ul>
</nav>
</div>
</td>
</tr>
</div>
</div>
</body>
</html>