本文实例讲述了java获取百度网盘真实下载链接的方法。分享给大家供大家参考。具体如下:
目前还存在一个问题,同一ip在获取3次以后会出现验证码,会获取失败,感兴趣的朋友对此可以加以完善。
返回的List<Map<String, Object>> 中的map包含:fileName( 文件名),url(实链地址)
HttpRequest.java如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
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;
}
}
|
获取方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
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程序设计有所帮助。