本文实例讲述了java获取百度网盘真实下载链接的方法。分享给大家供大家参考。具体如下:
目前还存在一个问题,同一ip在获取3次以后会出现验证码,会获取失败,感兴趣的朋友对此可以加以完善。
返回的List<Map<String, Object>> 中的map包含:fileName( 文件名),url(实链地址)
HttpRequest.java如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.lang.reflect.Method;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpRequest {
public static String getData(String u) throws Exception {
String re=\"\";
URL url = new URL(u);
HttpURLConnection httpURLConnection = (HttpURLConnection) url
.openConnection();
httpURLConnection.setRequestMethod(\"GET\");
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
InputStream is = httpURLConnection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader bufferedReader = new BufferedReader(isr);
String iL = \"\";
while ((iL = bufferedReader.readLine()) != null) {
re += iL + \"\\n\";
}
return re;
}
}
获取方法:
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class BaiduNetDisk {
public static List<Map<String, Object>> getUrl(String url) throws Exception {
List<String> fs_id = new ArrayList<String>();
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Document doc = Jsoup.connect(url).get();
String html = doc.toString();
int a = html.indexOf(\"{\\\"typicalPath\");
int b = html.indexOf(\"yunData.getCon\");
int sign_head = html.indexOf(\"yunData.SIGN = \\\"\");
int sign_foot = html.indexOf(\"yunData.TIMESTAMP\");
int time_head = html.indexOf(\"yunData.TIMESTAMP = \\\"\");
int time_foot = html.indexOf(\"yunData.SHARE_UK\");
int share_id_head = html.indexOf(\"yunData.SHARE_ID = \\\"\");
int share_id_foot = html.indexOf(\"yunData.SIGN \");
String sign = html.substring(sign_head, sign_foot);
sign = sign.substring(sign.indexOf(\"\\\"\") + 1, sign.indexOf(\"\\\";\"));
String time = html.substring(time_head, time_foot);
time = time.substring(time.indexOf(\"\\\"\") + 1, time.indexOf(\"\\\";\"));
String share_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(\"};\");
JSONArray jsonArray = new JSONArray(\"[\" + html.substring(a, b + 1)
+ \"]\");
JSONObject jsonObject = jsonArray.getJSONObject(0);
String uk = jsonObject.getString(\"uk\");
String shareid = jsonObject.getString(\"shareid\");
String path = URLEncoder.encode(jsonObject.getString(\"typicalPath\"),
\"utf-8\");
jsonArray = new JSONArray(\"[\" + jsonObject.getString(\"file_list\") + \"]\");
jsonObject = jsonArray.getJSONObject(0);
jsonArray = new JSONArray(jsonObject.getString(\"list\"));
jsonObject = jsonArray.getJSONObject(0);
String app_id = jsonObject.getString(\"app_id\");
if (jsonObject.getString(\"isdir\").equals(\"1\")) {
String url1 = \"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;
String fileListJson = HttpRequest.getData(url1);
System.out.println(fileListJson);
jsonArray = new JSONArray(\"[\" + fileListJson + \"]\");
jsonObject = jsonArray.getJSONObject(0);
jsonArray = new JSONArray(jsonObject.getString(\"list\"));
}
final int size = jsonArray.length();
for (int i = 0; i < size; i++) {
Map<String, Object> map = new HashMap<String, Object>();
jsonObject = jsonArray.getJSONObject(i);
String fileName = jsonObject.getString(\"server_filename\");
map.put(\"fileName\", fileName);
fs_id.add(jsonObject.getString(\"fs_id\"));
String fileInfo = 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\");
JSONArray jsonArray2 = new JSONArray(\"[\" + fileInfo + \"]\");
JSONObject json_data = jsonArray2.getJSONObject(0);
if (json_data.getString(\"errno\").equals(\"0\")) {
jsonArray2 = new JSONArray(json_data.getString(\"list\"));
json_data = jsonArray2.getJSONObject(0);
map.put(\"url\", json_data.getString(\"dlink\"));
} else if (json_data.getString(\"errno\").equals(\"-20\")) {
return null;
// String getVerCode();
} else {
return null;
}
list.add(map);
}
return list;
}
}
希望本文所述对大家的java程序设计有所帮助。
本文地址:https://www.stayed.cn/item/7019
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我