1. 引入所需網絡請求類:
var URL = plus.android.importClass("java.net.URL");
var URLConnection = plus.android.importClass("java.net.URLConnection");
var BufferedReader = plus.android.importClass("java.io.BufferedReader");
var InputStreamReader = plus.android.importClass("java.io.InputStreamReader");
var StrictMode = plus.android.importClass("android.os.StrictMode");
2. 忽略Android3.0開始強制程序不能在主線程中訪問網絡的強制策略
//以下兩句必加,不然會請求不了網絡,原因:
//android3.0版本開始就強制程序不能在主線程中訪問網絡,要把訪問網絡放在獨立的線程中。
//以下兩句可以忽略這些強制策略。
var policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
3. 使用URL進行網絡請求
var httpConn = new URL("https://login.10086.cn/captchazh.htm?type=05×tamp=" + nowtime).openConnection(); // 設置通用屬性 httpConn.setRequestProperty("Accept", "*/*"); httpConn.setRequestProperty("Content-Type", "image/jpeg"); httpConn.setRequestProperty("Connection", "Keep-Alive"); //設置Cookie //httpConn.setRequestProperty("Cookie", cookies); httpConn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); // 建立實際的連接 httpConn.connect();
4. 獲取請求頭和Set-Cookie以及返回的數據:
// 響應頭部獲取 var htmlHeads = []; var cookies = ""; //取cookie for (var i = 1; i < 100; i++) { var key_ = httpConn.getHeaderFieldKey(i); if (key_ == null){ console.log("--------------------------------"+cookies); break; }else{ htmlHeads.push(key_ + ':' +httpConn.getHeaderField(i)); if(key_ == "Set-Cookie") { var cookie = httpConn.getHeaderField(i); cookies += cookie.substring(0, cookie.indexOf(";")+1); } } } //----------------獲取輸出 start----------------// var reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8")); var lines; //輸出數據 var response = ""; while ((lines = reader.readLine()) != null) { response += lines; } reader.close(); //----------------獲取輸出 end----------------//
完整例子:
function gocook() { var nowtime = (new Date).getTime(); var URL = plus.android.importClass("java.net.URL"); var URLConnection = plus.android.importClass("java.net.URLConnection"); var BufferedReader = plus.android.importClass("java.io.BufferedReader"); var InputStreamReader = plus.android.importClass("java.io.InputStreamReader"); var StrictMode = plus.android.importClass("android.os.StrictMode"); //以下兩句必加,不然會請求不了網絡,原因: //android3.0版本開始就強制程序不能在主線程中訪問網絡,要把訪問網絡放在獨立的線程中。 //以下兩句可以忽略這些強制策略。 var policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); var httpConn = new URL("https://login.10086.cn/captchazh.htm?type=05×tamp=" + nowtime).openConnection(); // 設置通用屬性 httpConn.setRequestProperty("Accept", "*/*"); httpConn.setRequestProperty("Content-Type", "image/jpeg"); httpConn.setRequestProperty("Connection", "Keep-Alive"); //設置Cookie //httpConn.setRequestProperty("Cookie", cookies); httpConn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); // 建立實際的連接 httpConn.connect(); // 響應頭部獲取 var htmlHeads = []; var cookies = ""; //取cookie for (var i = 1; i < 100; i++) { var key_ = httpConn.getHeaderFieldKey(i); if (key_ == null){ console.log("--------------------------------"+cookies); break; }else{ htmlHeads.push(key_ + ':' +httpConn.getHeaderField(i)); if(key_ == "Set-Cookie") { var cookie = httpConn.getHeaderField(i); cookies += cookie.substring(0, cookie.indexOf(";")+1); } } } //----------------獲取輸出 start----------------// var reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8")); var lines; //輸出數據 var response = ""; while ((lines = reader.readLine()) != null) { response += lines; } reader.close(); //----------------獲取輸出 end----------------// }