HttpClient模拟请求

1.Get请求

/**
 *     输入对应的参数,获取对应的json数据--get请求
 * @param url 需要解析的地址
 * @param params 参数地址
 * @return 返回一个对应的json数据
 * List:集合。类似于数组的一个东西。NameValuePair:类型。
 */
public static String httpGetCallbackData(String url, List<NameValuePair> params) {
   //===========模拟浏览器的环境开始=====================
   //1.获取连接客户端工具
   BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager();
   CloseableHttpClient httpclient = HttpClients.custom()
         .setConnectionManager(connManager)
         .build();
   //2.网址返回的json数据。创建一个空的引用。
   String entityStr = null;
   //3.响应工具。request:请求  response:响应
    CloseableHttpResponse response = null;
   try {//处理异常的代码块
      
      //4.由于GET请求的参数都是拼装在URL地址后方,所以我们要构建一个URL,带参数
      //?key=周杰伦&pn=1&rn=30。URIBuilder:地址建设者。
        URIBuilder uriBuilder = new URIBuilder(url);
        
        //5.添加参数的形式。将这三个参数拼接到地址栏的后面。
        //Set:设置、创建 Parameter:参数,加s,多个参数
      uriBuilder.setParameters(params);
        
      //6.创建GET请求对象
      //uriBuilder.build()操作是将一串url地址交给htppGet去操作。
      HttpGet httpGet = new HttpGet(uriBuilder.build());
      //7.设置请求参数。设置一些常用参数:这个参数可以不写,有默认值的。
      //Socket:客户端   Timeout:超时
      //Connect:连接
      //ConnectionRequest:连接请求超时
      RequestConfig requestConfig = RequestConfig.custom()
            .setSocketTimeout(5000)
            .setConnectTimeout(50000)
            .setConnectionRequestTimeout(50000)
            .build();
      //8.加载请求参数。将这些常用参数
      httpGet.setConfig(requestConfig);
      
      //9.添加请求头信息
      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");
      
      //===========模拟浏览器的环境结束=====================
      
      //10.执行请求。按回车。
      response = httpclient.execute(httpGet);
      //11.获得响应的实体对象
      HttpEntity entity = response.getEntity();
        //12.使用Apache提供的工具类进行转换成字符串
      entityStr = EntityUtils.toString(entity, "UTF-8");
      // 打印响应内容
       //System.out.println(entityStr);
   } 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请求

/**
 *     输入对应的参数,获取对应的json数据--post请求
 * @param url 需要解析的地址
 * @param params 参数地址
 * @return 返回一个对应的json数据
 */
public static String httpPostCallbackData(String url, List<NameValuePair> params) {
   //获取连接客户端工具
   BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager();
   CloseableHttpClient httpclient = HttpClients.custom()
         .setConnectionManager(connManager)
         .build();
   //网址返回的json数据
   String entityStr = null;
   //相应工具
    CloseableHttpResponse response = null;
   try {
      // 创建POST请求对象
      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");
      
      // 添加请求参数,使用URL实体转换工具
        HttpEntity httpEntity = new UrlEncodedFormEntity(params,"UTF-8");
      httpPost.setEntity(httpEntity);
      
      // 执行请求
      response = httpclient.execute(httpPost);
      // 获得响应的实体对象
      HttpEntity entity = response.getEntity();
        // 使用Apache提供的工具类进行转换成字符串
      entityStr = EntityUtils.toString(entity, "UTF-8");
      // 打印响应内容
       //System.out.println(entityStr);
   } 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 {
   /**
    *     输入对应的参数,获取对应的json数据--get请求
    * @param url 需要解析的地址
    * @param params 参数地址
    * @return 返回一个对应的json数据
    * List:集合。类似于数组的一个东西。NameValuePair:类型。
    */
   public static String httpGetCallbackData(String url, List<NameValuePair> params) {
      //===========模拟浏览器的环境开始=====================
      //1.获取连接客户端工具
      BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager();
      CloseableHttpClient httpclient = HttpClients.custom()
            .setConnectionManager(connManager)
            .build();
      //2.网址返回的json数据。创建一个空的引用。
      String entityStr = null;
      //3.响应工具。request:请求  response:响应
       CloseableHttpResponse response = null;
      try {//处理异常的代码块
         
         //4.由于GET请求的参数都是拼装在URL地址后方,所以我们要构建一个URL,带参数
         //?key=周杰伦&pn=1&rn=30。URIBuilder:地址建设者。
           URIBuilder uriBuilder = new URIBuilder(url);
           
           //5.添加参数的形式。将这三个参数拼接到地址栏的后面。
           //Set:设置、创建 Parameter:参数,加s,多个参数
         uriBuilder.setParameters(params);
           
         //6.创建GET请求对象
         //uriBuilder.build()操作是将一串url地址交给htppGet去操作。
         HttpGet httpGet = new HttpGet(uriBuilder.build());
         //7.设置请求参数。设置一些常用参数:这个参数可以不写,有默认值的。
         //Socket:客户端   Timeout:超时
         //Connect:连接
         //ConnectionRequest:连接请求超时
         RequestConfig requestConfig = RequestConfig.custom()
               .setSocketTimeout(5000)
               .setConnectTimeout(50000)
               .setConnectionRequestTimeout(50000)
               .build();
         //8.加载请求参数。将这些常用参数
         httpGet.setConfig(requestConfig);
         
         //9.添加请求头信息
         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");
         
         //===========模拟浏览器的环境结束=====================
         
         //10.执行请求。按回车。
         response = httpclient.execute(httpGet);
         //11.获得响应的实体对象
         HttpEntity entity = response.getEntity();
           //12.使用Apache提供的工具类进行转换成字符串
         entityStr = EntityUtils.toString(entity, "UTF-8");
         // 打印响应内容
          //System.out.println(entityStr);
      } 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;
   }
   
   /**
    *     输入对应的参数,获取对应的json数据--post请求
    * @param url 需要解析的地址
    * @param params 参数地址
    * @return 返回一个对应的json数据
    */
   public static String httpPostCallbackData(String url, List<NameValuePair> params) {
      //获取连接客户端工具
      BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager();
      CloseableHttpClient httpclient = HttpClients.custom()
            .setConnectionManager(connManager)
            .build();
      //网址返回的json数据
      String entityStr = null;
      //相应工具
       CloseableHttpResponse response = null;
      try {
         // 创建POST请求对象
         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");
         
         // 添加请求参数,使用URL实体转换工具
           HttpEntity httpEntity = new UrlEncodedFormEntity(params,"UTF-8");
         httpPost.setEntity(httpEntity);
         
         // 执行请求
         response = httpclient.execute(httpPost);
         // 获得响应的实体对象
         HttpEntity entity = response.getEntity();
           // 使用Apache提供的工具类进行转换成字符串
         entityStr = EntityUtils.toString(entity, "UTF-8");
         // 打印响应内容
          //System.out.println(entityStr);
      } 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) {
      //1.1获取所有的歌曲名称和rid
      //?key=周杰伦&pn=1&rn=10
      //1.2创建一个List<NameValuePair>集合
      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);
//    System.out.println(music_information);
      JSONObject parseObject = JSONObject.parseObject(music_information);
      String data = parseObject.getString("data");
      JSONObject music_data = JSONObject.parseObject(data);
      String list = music_data.getString("list");
      //1.3通过JSONArray获取到list信息
      JSONArray music_list = JSONObject.parseArray(list);
//    System.out.println(music_list.toString());
      return music_list.toString();
   }
   
   
   /*
    * 获取每一首歌曲的URL(里面还包含其他信息)
    * http://www.kuwo.cn/url?format=mp3&rid=75902101&response=url&type=convert_url3&br=128kmp3&from=web
    */
   public static String getMusicUrl(String rid) {
      //2.1获取歌曲的播放地址
      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"));
      //2.2添加后拼接成一个完整的url地址
      String musicStr = MusicDownload.httpGetCallbackData("http://www.kuwo.cn/url?format=mp3", params2);
//    System.out.println(musicStr);
      JSONObject music = JSONObject.parseObject(musicStr);
      String musicUrl = music.getString("url");
//    System.out.println(musicUrl);
      return musicUrl;
   }
   
   /*
    * 下载歌曲到磁盘中
    */
   public static void downLoadMusic(String musicUrl ,String musicName) {
      try {
         //3.1 将这个地址交给URL对象处理
         URL url = new URL(musicUrl);
         //3.2获取一个打开url的连接对象
         URLConnection openConnection = url.openConnection();
         //3.3获取文件的输入流
         InputStream is = openConnection.getInputStream();
         //3.4读取文件信息
         int len = 0;
         byte[] b = new byte[1024*8];
         //3.5创建文件输出流(歌曲所下载的位置)
         OutputStream os = new FileOutputStream("D:\\Java课程设计\\kwMusic\\"+musicName);
         //3.6读取文件
         while((len = is.read(b)) != -1 ) {
            os.write(b, 0, len);
         }
         System.out.println("歌曲下载完成:下载路径是  -->"+"D:\\\\Java课程设计\\\\kwMusic\\"+musicName);
      } catch (Exception e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
   }
   
   public static void main(String[] args) {
      //获取当前时间毫秒值
      System.out.println("开始进行下载歌曲...");
      long currentTimeMillis_1 = System.currentTimeMillis();
      
      //1.获取到所有的歌曲信息
      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");
         //2.获取到所需要下载的歌曲url地址
         /*"url": "https://win-web-nf01-sycdn.kuwo.cn/e46e8e
          * 6f33eafd16090bee86cd3c38d6/5d6df316/resource/n3/72/31/1295078204.mp3"}
          */
         String url = MusicDownload.getMusicUrl(rid);
         //3.进行下载歌曲
         //MusicDownload.downLoadMusic(url, artist+"-"+name+".mp3");
      }
      //4.下载完成所需要的时间
      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{
        /* 进行设置背景图片 */
        /*background: url("images/bg_2.png") no-repeat center;*/
      }

      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>&nbsp;&nbsp;&nbsp</li>--%>
              <%--<li><a href="index_example2.jsp?key=<%=key %>&pn=<%=(pn+1)%>&rn=4">下一页</a>&nbsp;&nbsp;&nbsp</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>
        <!-- 每一首首歌曲 -->
        <%
          //这个括号百分号里面是写Java代码的
          String key = request.getParameter("key");//parameter:
          //获取pn
          String pnStr = request.getParameter("pn");
          int pn = 1;
          if(pnStr != null && !"".equals(pnStr)){
            //将字符串形式的数字转化为数字类型
            pn = Integer.parseInt(pnStr);
          }
          //如果key为空,直接查询周杰伦的信息
          if(key == null || "".equals(key)){
            key = "周杰伦";
          }
          String jsonStr = MusicDownload.getMusic(key, pnStr, "4");
          JSONArray jsonArray = JSONObject.parseArray(jsonStr);
          //创建一个json的数组
          JSONArray array = new JSONArray();
          for (int i = 0; i < jsonArray.size(); i++) {
            //获取每个歌曲的信息
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            //得到参数
            String rid = jsonObject.getString("rid");//歌曲id
            String name = jsonObject.getString("name");//歌曲名
            String artist = jsonObject.getString("artist");//歌手名
            String pic = jsonObject.getString("pic120");//picture 歌曲图片
            String album = jsonObject.getString("album");

            //获取对应的url
            String musicUrl = MusicDownload.getMusicUrl(rid);
            //System.out.println("musicUrl="+musicUrl);
            //下载
            //MusicUtils.downloadMusic(musicUrl, artist+"-"+name+".mp3");
            out.write("<td>"+(i+1)+"</td>");
            out.write("<td><img src='"+pic+"' alt='图片未找到'/></td>");//字符串的拼接

            //每一首歌的json
            JSONObject musicJson = new JSONObject();
            musicJson.fluentPut("name", artist+"-"+name);//拼接歌曲名称
            musicJson.fluentPut("pic", pic);
            musicJson.fluentPut("musicUrl", musicUrl);
            System.out.println(musicJson);
            //将每一首歌的json放到json数组中去
            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><a target='_blank' href='music_1.jsp?musicJson=["+musicJson.toString()+"]'>"+name+"</a></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>&nbsp;&nbsp;&nbsp;
                <li><a href="index.jsp?key=<%=key %>&pn=<%=(pn-1)%>&rn=4">上一页</a>&nbsp;&nbsp;&nbsp</li>
                <li><a href="index.jsp?key=<%=key %>&pn=<%=(pn+1)%>&rn=4">下一页</a>&nbsp;&nbsp;&nbsp</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{
        /* 进行设置背景图片 */
        /*background: url("images/bg_2.png") no-repeat center;*/
      }

      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>&nbsp;&nbsp;&nbsp</li>--%>
              <%--<li><a href="index_example2.jsp?key=<%=key %>&pn=<%=(pn+1)%>&rn=4">下一页</a>&nbsp;&nbsp;&nbsp</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>
        <!-- 每一首首歌曲 -->
        <%
          //这个括号百分号里面是写Java代码的
          String key = request.getParameter("key");//parameter:
          //获取pn
          String pnStr = request.getParameter("pn");
          int pn = 1;
          if(pnStr != null && !"".equals(pnStr)){
            //将字符串形式的数字转化为数字类型
            pn = Integer.parseInt(pnStr);
          }
          //如果key为空,直接查询周杰伦的信息
          if(key == null || "".equals(key)){
            key = "周杰伦";
          }
          String jsonStr = MusicDownload.getMusic(key, pnStr, "4");
          JSONArray jsonArray = JSONObject.parseArray(jsonStr);
          //创建一个json的数组
          JSONArray array = new JSONArray();
          for (int i = 0; i < jsonArray.size(); i++) {
            //获取每个歌曲的信息
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            //得到参数
            String rid = jsonObject.getString("rid");//歌曲id
            String name = jsonObject.getString("name");//歌曲名
            String artist = jsonObject.getString("artist");//歌手名
            String pic = jsonObject.getString("pic120");//picture 歌曲图片
            String album = jsonObject.getString("album");

            //获取对应的url
            String musicUrl = MusicDownload.getMusicUrl(rid);
            //System.out.println("musicUrl="+musicUrl);
            //下载
            //MusicUtils.downloadMusic(musicUrl, artist+"-"+name+".mp3");
            out.write("<td>"+(i+1)+"</td>");
            out.write("<td><img src='"+pic+"' alt='图片未找到'/></td>");//字符串的拼接

            //每一首歌的json
            JSONObject musicJson = new JSONObject();
            musicJson.fluentPut("name", artist+"-"+name);//拼接歌曲名称
            musicJson.fluentPut("pic", pic);
            musicJson.fluentPut("musicUrl", musicUrl);
            System.out.println(musicJson);
            //将每一首歌的json放到json数组中去
            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><a target='_blank' href='music_1.jsp?musicJson=["+musicJson.toString()+"]'>"+name+"</a></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>&nbsp;&nbsp;&nbsp;
                <li><a href="index.jsp?key=<%=key %>&pn=<%=(pn-1)%>&rn=4">上一页</a>&nbsp;&nbsp;&nbsp</li>
                <li><a href="index.jsp?key=<%=key %>&pn=<%=(pn+1)%>&rn=4">下一页</a>&nbsp;&nbsp;&nbsp</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>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您也可以使用Apache HttpClient库来模拟发送POST请求,并将JSON数据作为请求体发送。以下是一个示例代码: ```java import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClientBuilder; import java.io.BufferedReader; import java.io.InputStreamReader; public class PostJsonRequest { public static void main(String[] args) { try { // 设置请求URL和JSON数据 String url = "http://example.com/api"; String json = "{\"name\": \"John\", \"age\": 30}"; // 创建HttpClient和HttpPost对象 HttpClient client = HttpClientBuilder.create().build(); HttpPost post = new HttpPost(url); // 将JSON数据作为请求体发送 StringEntity entity = new StringEntity(json); post.setEntity(entity); post.setHeader("Content-type", "application/json"); post.setHeader("Accept", "application/json"); // 发送请求并获取响应 HttpResponse response = client.execute(post); // 打印响应内容 BufferedReader rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent())); String line = ""; while ((line = rd.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } } ``` 在上述示例中,我们使用了Apache HttpClient库来创建HttpClient和HttpPost对象,并将JSON数据作为请求体发送。注意:在实际使用时,您需要将URL和JSON数据替换为实际的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值