1. 程式人生 > >Hbuilder MUI裏面使用java.net.URL發送網絡請求,操作cookie

Hbuilder MUI裏面使用java.net.URL發送網絡請求,操作cookie

line console ptc adl ima header str .net bre

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&timestamp=" + 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&timestamp=" + 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----------------//
        }

Hbuilder MUI裏面使用java.net.URL發送網絡請求,操作cookie