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程序设计有所帮助。