Hbuilder MUI里面使用java.net.URL发送网络请求,操作cookie

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----------------//
        }
时间: 2024-10-13 10:13:37

Hbuilder MUI里面使用java.net.URL发送网络请求,操作cookie的相关文章

java使用httpcomponents发送get请求

一.适用场景 在ESTful webservice中,get方法一般都是用来获取数据.我们可以使用httpcomponents组件来完成调用. 如我们需要发起get请求,携带的参数都是附加到请求的url后面. url:"http://www.xxxxx.com/message?id=000010" 二.代码示例 1 package com.demo.test; 2 3 import java.io.IOException; 4 5 import org.apache.http.Http

IOS发送网络请求 心得

路线: 实例化URL (网络资源) 利用 URL 建立URLReques (网络请求) 默认是get 请求 对于post 请求 需要创建请求数据体          利用 URLConnection 发送网络请求 (建立连接) 获得结果 或者: (也就是:) URL Reques Connection  HTTP   中利用  URLReques 建立网络请求方式:  GET & POST              get 请求 是 从服务器中取            post 请求 是 往服务

python发送网络请求

1.使用urllib模块 get请求: res = urlopen(url) from urllib.request import urlopen url = 'http://www.nnzhp.cn' print(urlopen(url))#返回http.client.HTTPResponse object at 0x00000235BA25A160 print(urlopen(url).read().decode())#返回get到的页面的源代码 # decode是将base类型转为enco

在安卓主线程不能发送网络请求的解决办法

第一种方法: 在主线程中加入这段代码,强制在主线程执行网络请求 if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } 第二种方法: 利用安卓系统自带的异步执行,将网络请求的代码加入在里面 new Async

通过java.net.URLConnection发送HTTP请求的方法

1.GET与POST请求的区别 a) get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet, b) post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内. 2.URLConnection的对象 a) 获取URLConnection实例 URL url = new URL(urlString); // 根据url生成urlConnection对象 urlConnection = (HttpURLConnection) url.

java 实现HttpRequest 发送http请求

package com.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.util.List; import java.util.Map; public class h

Java 使用URL从网络读取图片

import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.URL; public class DownLoadImageNetwork { public static void main(String[] args) { try { URL url = new URL("http://www.baidu.com/img/logo_gif_be7507c6c68

iOS-WKWebView携带cookie发送http请求,cookie失效

发送请求代码: NSString *testUrl = @"http://10.22.122.7:8081/test2_action/view_index"; NSURL *url = [NSURL URLWithString:testUrl]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy tim

go tcp发送网络请求

//发送http请求 package main import ( "fmt" "net" "io" ) func main () { //使用Dial建立连接 conn, err := net.Dial("tcp", "www.baidu.com:80") if err != nil { fmt.Println("error dialing", err.Error()) return }