本文实例讲述了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程序设计有所帮助。