java获取百度网盘真实下载链接的方法
本文实例讲述了java获取百度网盘真实下载链接的方法。分享给大家供大家参考。具体如下:
目前还存在一个问题,同一ip在获取3次以后会出现验证码,会获取失败,感兴趣的朋友对此可以加以完善。
返回的List<Map<String,Object>> 中的map包含:fileName(文件名),url(实链地址)
HttpRequest.java如下:
importjava.io.BufferedReader; importjava.io.IOException; importjava.io.InputStream; importjava.io.InputStreamReader; importjava.io.RandomAccessFile; importjava.lang.reflect.Method; importjava.net.HttpURLConnection; importjava.net.URL; publicclassHttpRequest{ publicstaticStringgetData(Stringu)throwsException{ Stringre=""; URLurl=newURL(u); HttpURLConnectionhttpURLConnection=(HttpURLConnection)url .openConnection(); httpURLConnection.setRequestMethod("GET"); httpURLConnection.setDoInput(true); httpURLConnection.setDoOutput(true); InputStreamis=httpURLConnection.getInputStream(); InputStreamReaderisr=newInputStreamReader(is); BufferedReaderbufferedReader=newBufferedReader(isr); StringiL=""; while((iL=bufferedReader.readLine())!=null){ re+=iL+"\n"; } returnre; } }
获取方法:
importjava.net.URLEncoder; importjava.util.ArrayList; importjava.util.HashMap; importjava.util.List; importjava.util.Map; importorg.json.JSONArray; importorg.json.JSONObject; importorg.jsoup.Jsoup; importorg.jsoup.nodes.Document; publicclassBaiduNetDisk{ publicstaticList<Map<String,Object>>getUrl(Stringurl)throwsException{ List<String>fs_id=newArrayList<String>(); List<Map<String,Object>>list=newArrayList<Map<String,Object>>(); Documentdoc=Jsoup.connect(url).get(); Stringhtml=doc.toString(); inta=html.indexOf("{\"typicalPath"); intb=html.indexOf("yunData.getCon"); intsign_head=html.indexOf("yunData.SIGN=\""); intsign_foot=html.indexOf("yunData.TIMESTAMP"); inttime_head=html.indexOf("yunData.TIMESTAMP=\""); inttime_foot=html.indexOf("yunData.SHARE_UK"); intshare_id_head=html.indexOf("yunData.SHARE_ID=\""); intshare_id_foot=html.indexOf("yunData.SIGN"); Stringsign=html.substring(sign_head,sign_foot); sign=sign.substring(sign.indexOf("\"")+1,sign.indexOf("\";")); Stringtime=html.substring(time_head,time_foot); time=time.substring(time.indexOf("\"")+1,time.indexOf("\";")); Stringshare_id=html.substring(share_id_head,share_id_foot); share_id=share_id.substring(share_id.indexOf("\"")+1, share_id.indexOf("\";")); System.out.println(share_id); html=html.substring(a,b); a=html.indexOf("{\"typicalPath"); b=html.indexOf("};"); JSONArrayjsonArray=newJSONArray("["+html.substring(a,b+1) +"]"); JSONObjectjsonObject=jsonArray.getJSONObject(0); Stringuk=jsonObject.getString("uk"); Stringshareid=jsonObject.getString("shareid"); Stringpath=URLEncoder.encode(jsonObject.getString("typicalPath"), "utf-8"); jsonArray=newJSONArray("["+jsonObject.getString("file_list")+"]"); jsonObject=jsonArray.getJSONObject(0); jsonArray=newJSONArray(jsonObject.getString("list")); jsonObject=jsonArray.getJSONObject(0); Stringapp_id=jsonObject.getString("app_id"); if(jsonObject.getString("isdir").equals("1")){ Stringurl1="http://pan.baidu.com/share/list?uk=" +uk +"&shareid=" +shareid +"&page=1&num=100&dir=" +path +"&order=time&desc=1&_=" +time +"&bdstoken=c51077ce0e0e313a16066612a13fbcd4&channel=chunlei&clienttype=0&web=1&app_id=" +app_id; StringfileListJson=HttpRequest.getData(url1); System.out.println(fileListJson); jsonArray=newJSONArray("["+fileListJson+"]"); jsonObject=jsonArray.getJSONObject(0); jsonArray=newJSONArray(jsonObject.getString("list")); } finalintsize=jsonArray.length(); for(inti=0;i<size;i++){ Map<String,Object>map=newHashMap<String,Object>(); jsonObject=jsonArray.getJSONObject(i); StringfileName=jsonObject.getString("server_filename"); map.put("fileName",fileName); fs_id.add(jsonObject.getString("fs_id")); StringfileInfo=HttpRequest .getData("http://pan.baidu.com/api/sharedownload?sign=" +sign +"×tamp=" +time +"&bdstoken=c51077ce0e0e313a16066612a13fbcd4&channel=chunlei&clienttype=0&web=1&app_id=250528&encrypt=0&product=share&uk=" +uk+"&primaryid="+share_id+"&fid_list=%5B" +fs_id.get(i)+"%5D"); JSONArrayjsonArray2=newJSONArray("["+fileInfo+"]"); JSONObjectjson_data=jsonArray2.getJSONObject(0); if(json_data.getString("errno").equals("0")){ jsonArray2=newJSONArray(json_data.getString("list")); json_data=jsonArray2.getJSONObject(0); map.put("url",json_data.getString("dlink")); }elseif(json_data.getString("errno").equals("-20")){ returnnull; //StringgetVerCode(); }else{ returnnull; } list.add(map); } returnlist; } }
希望本文所述对大家的java程序设计有所帮助。