一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

鴻蒙 網(wǎng)絡(luò)請(qǐng)求的各種實(shí)現(xiàn)方式(原生+okhttp+okhttputils+zzrhttp)【鴻蒙 專題2】

 大前端之旅 2021-12-16

感謝您抽出

.

.

來閱讀本文

大家好。我是堅(jiān)果,這是我的公眾號(hào)“堅(jiān)果前端”,覺得不錯(cuò)的話,關(guān)注一下吧,如果你迷惘,不妨看看碼農(nóng)的軌跡

前言:

最近看了一下鴻蒙的網(wǎng)絡(luò)請(qǐng)求部分的內(nèi)容(這部分主要還是按照鴻蒙開發(fā)文檔里面提到 java ui,js  ui的網(wǎng)絡(luò)請(qǐng)求請(qǐng)大家查看官方的文檔即可)那么廢話不多說我們正式開始。

準(zhǔn)備工作:

1 安裝鴻蒙開發(fā)環(huán)境 大家可以看我之前的文章 華為鴻蒙系統(tǒng)開發(fā)初體驗(yàn) :ihttps://www.jianshu.com/p/f94c847c7fdc

具體實(shí)現(xiàn)

鴻蒙系統(tǒng)網(wǎng)絡(luò)訪問基礎(chǔ)配置

1添加網(wǎng)絡(luò)訪問權(quán)限

跟Android類似,要訪問網(wǎng)絡(luò),我們首先要配置網(wǎng)絡(luò)訪問權(quán)限,在config.json的"module"節(jié)點(diǎn)最后,添加上網(wǎng)絡(luò)權(quán)限代碼

"reqPermissions": [
      {
        "reason""",
        "name""ohos.permission.INTERNET"
      }
    ]
image.png

2 設(shè)置訪問模式

鴻蒙的默認(rèn)是https訪問模式,如果您的請(qǐng)求網(wǎng)址是http開頭的,請(qǐng)?jiān)赾onfig.json文件中的deviceConfig下,添加如下設(shè)置

deviceConfig": { 
     "
default": { 
         "
network": { 
             "
cleartextTraffic": true 
         } 
     } 
 }, 
image.png

具體代碼實(shí)現(xiàn):

JAVA原生請(qǐng)求

由于鴻蒙系統(tǒng)支持Java開發(fā),所以我們可以直接使用Java原生的Api來進(jìn)行網(wǎng)絡(luò)訪問 該方式使用了java的url.openConnection() Api來獲取網(wǎng)絡(luò)數(shù)據(jù)

請(qǐng)求工具類

我們這邊寫了一個(gè)基于HttpURLConnection 封裝的工具類來處理我們的原生網(wǎng)絡(luò)請(qǐng)求

package com.example.hms_network.net;
import javax.net.ssl.*;
import java.io.*;
import java.net.*;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;
/**
 * 創(chuàng)建人:xuqing
 * 創(chuàng)建時(shí)間:2021年1月16日16:11:10
 * 類說明:網(wǎng)絡(luò)請(qǐng)求工具類
 *
 */
public  class HttpUtils{
    private final static String PARAMETER_SEPARATOR = "&";
    private final static String NAME_VALUE_SEPARATOR = "=";
    /**
     *訪問url,獲取內(nèi)容
     * @param urlStr
     * @return
     */
    public static String httpGet(String urlStr){
        StringBuilder sb = new StringBuilder();
        try{
            //添加https信任
            SSLContext sslcontext = SSLContext.getInstance("SSL");//第一個(gè)參數(shù)為協(xié)議,第二個(gè)參數(shù)為提供者(可以缺省)
            TrustManager[] tm = {new HttpX509TrustManager()};
            sslcontext.init(null, tm, new SecureRandom());
            HostnameVerifier ignoreHostnameVerifier = new HostnameVerifier() {
                public boolean verify(String s, SSLSession sslsession) {
                    System.out.println("WARNING: Hostname is not matched for cert.");
                    return true;
                }
            };
            HttpsURLConnection.setDefaultHostnameVerifier(ignoreHostnameVerifier);
            HttpsURLConnection.setDefaultSSLSocketFactory(sslcontext.getSocketFactory());
            URL url = new URL(urlStr);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setReadTimeout(10000);
            connection.setConnectTimeout(10000);
            connection.connect();
            int code = connection.getResponseCode();
            if (code == HttpURLConnection.HTTP_OK) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String temp;
                while ((temp = reader.readLine()) != null) {
                    sb.append(temp);
                }
                reader.close();
            }
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
        return sb.toString();
    }



    public static String httpGet(String urlStr ,Map<String, String> params){
        StringBuilder sb = new StringBuilder();
        try{
            //添加https信任
            SSLContext sslcontext = SSLContext.getInstance("SSL");//第一個(gè)參數(shù)為協(xié)議,第二個(gè)參數(shù)為提供者(可以缺省)
            TrustManager[] tm = {new HttpX509TrustManager()};
            sslcontext.init(null, tm, new SecureRandom());
            HostnameVerifier ignoreHostnameVerifier = new HostnameVerifier() {
                public boolean verify(String s, SSLSession sslsession) {
                    System.out.println("WARNING: Hostname is not matched for cert.");
                    return true;
                }
            };
            HttpsURLConnection.setDefaultHostnameVerifier(ignoreHostnameVerifier);
            HttpsURLConnection.setDefaultSSLSocketFactory(sslcontext.getSocketFactory());
            URL url = new URL(getUrl(urlStr,params));
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setReadTimeout(10000);
            connection.setConnectTimeout(10000);
            connection.connect();
            int code = connection.getResponseCode();
            if (code == HttpURLConnection.HTTP_OK) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String temp;
                while ((temp = reader.readLine()) != null) {
                    sb.append(temp);
                }
                reader.close();
            }
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
        return sb.toString();
    }


    /**
     * get請(qǐng)求,將鍵值對(duì)憑接到url上
     */
    private static  String getUrl(String path, Map<String, String> paramsMap) {
        if(paramsMap != null){
            path = path+"?";
            for (String key: paramsMap.keySet()){
                path = path + key+"="+paramsMap.get(key)+"&";
            }
            path = path.substring(0,path.length()-1);
        }
        return path;
    }



    /**
     * HttpPost 網(wǎng)絡(luò)請(qǐng)求工具類
     *
     * @param urlStr
     * @return
     */
    public static String httpPost(String urlStr) {

        String result = null;
        URL url = null;
        HttpURLConnection connection = null;
        InputStreamReader in = null;
        try {
            String paramsEncoded = "";
        /*    if (params != null) {
                paramsEncoded = urlParamsFormat(params, "UTF-8");
            }*/
            url = new URL(urlStr);
            if (url.getProtocol().toUpperCase().equals("HTTPS")) {
                trustAllHost();
                HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
                connection = https;
            } else {
                connection = (HttpURLConnection) url.openConnection();
            }
            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(20000);
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type""application/x-www-form-urlencoded");
            connection.setRequestProperty("Charset""utf-8");
            DataOutputStream dop = new DataOutputStream(
                    connection.getOutputStream());
         //   dop.writeBytes(paramsEncoded);
            dop.flush();
            dop.close();
            if (connection.getResponseCode() == connection.HTTP_OK) {
                in = new InputStreamReader(connection.getInputStream());
                BufferedReader bufferedReader = new BufferedReader(in);
                StringBuffer strBuffer = new StringBuffer();
                String line = null;
                while ((line = bufferedReader.readLine()) != null) {
                    strBuffer.append(line);
                }
                result = strBuffer.toString();
            } else {
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }

    /**
     * HttpPost 網(wǎng)絡(luò)請(qǐng)求工具類
     *
     * @param urlStr
     * @param params
     * @return
     */
    public static String httpPost(String urlStr, Map<String, String> params) {

        String result = null;
        URL url = null;
        HttpURLConnection connection = null;
        InputStreamReader in = null;
        try {
            String paramsEncoded = "";
            if (params != null) {
                paramsEncoded = urlParamsFormat(params, "UTF-8");
            }
            url = new URL(urlStr);
            if (url.getProtocol().toUpperCase().equals("HTTPS")) {
                trustAllHost();
                HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
                connection = https;
            } else {
                connection = (HttpURLConnection) url.openConnection();
            }
            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(20000);
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type""application/x-www-form-urlencoded");
            connection.setRequestProperty("Charset""utf-8");
            DataOutputStream dop = new DataOutputStream(
                    connection.getOutputStream());
            dop.writeBytes(paramsEncoded);
            dop.flush();
            dop.close();
            if (connection.getResponseCode() == connection.HTTP_OK) {
                in = new InputStreamReader(connection.getInputStream());
                BufferedReader bufferedReader = new BufferedReader(in);
                StringBuffer strBuffer = new StringBuffer();
                String line = null;
                while ((line = bufferedReader.readLine()) != null) {
                    strBuffer.append(line);
                }
                result = strBuffer.toString();
            } else {
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }

    /**
     * Returns a String that is suitable for use as an application/x-www-form-urlencoded
     * list of parameters in an HTTP PUT or HTTP POST.
     *
     * @param params
     * @param charset
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String urlParamsFormat(Map<String, String> params, String charset) throws UnsupportedEncodingException {
        final StringBuilder sb = new StringBuilder();
        for (String key : params.keySet()) {
            final String val = params.get(key);
            if (!TextUtils.isEmpty(key) && !TextUtils.isEmpty(val)) {
                final String encodedName = URLEncoder.encode(key, charset);
                final String encodedValue = URLEncoder.encode(val, charset);
                if (sb.length() > 0) {
                    sb.append(PARAMETER_SEPARATOR);
                }
                sb.append(encodedName).append(NAME_VALUE_SEPARATOR)
                        .append(encodedValue);
            }
        }

        return sb.toString();
    }

    /**
     * trust all host
     */
    private static void trustAllHost() {
        // Create a trust manager that does not validate certificate chains
        // Android use X509 cert
        TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[]{};
            }
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }
            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }
        }};
        // Install the all-trusting trust manager
        try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, trustAllCerts, new SecureRandom());
            HttpsURLConnection
                    .setDefaultSSLSocketFactory(sc.getSocketFactory());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

處理兼容https 的代碼HttpX509TrustManager.java

package com.example.hms_network.net;
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

public class HttpX509TrustManager implements X509TrustManager {
    @Override
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    }

    @Override
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }
}

原生網(wǎng)絡(luò)請(qǐng)求具體調(diào)用測(cè)試

    public  void   nativeNet(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                String  getjson= HttpUtils.httpGet(url);
                System.out.println("nativeNet   getjson  --- >  "+getjson);
            }
        }).start();
    }

我們?cè)诳刂婆_(tái)看到日志輸出了請(qǐng)求返回的數(shù)據(jù)

okhttp 請(qǐng)求

首先要添加依賴  我這邊是用jar包本地依賴 當(dāng)然你再build.gradle里面去添加gradle命令 然后從倉庫去拉取依賴也是可以的具體代碼

    public  void  okhttpNet() {
        OkHttpClient client = new OkHttpClient();
        final Request request = new Request.Builder()
                .get()
                .url(url)
                .build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String responseStr = response.body().string();
                System.out.println("responseStr  --- > "+responseStr);
            }
        });
    }

okhttputils請(qǐng)求

(這個(gè)是張鴻樣大神對(duì)okttp的二次封裝的一個(gè)框架 也比較好用 現(xiàn)在已經(jīng)不維護(hù)了)依賴也是用jar包在本地依賴 也可以在build.gradle里面去添加gradle命令也行

   public   void   okhttpUtilsNet(){
        OkHttpUtils.get().
                url(url)
                .build()
                .execute(new StringCallback() {
                    @Override
                    public void onError(Call call, Exception e, int i) {
                        System.out.println("Exception  --- > "+e);
                    }

                    @Override
                    public void onResponse(String s, int i) {
                        System.out.println("okhttpUtilsNet  s  --- > "+s);
                    }
        });
    }

zzrHttp

這個(gè)是一個(gè)ZZR老師 老師的一個(gè)開源庫 我這里就不多講 簡(jiǎn)單說一下  詳細(xì)的可以去看他的教程哈
教程地址 :https://edu.51cto.com/course/25200.html zzrhttp使用需要在build.gradle里面去添加依賴然后sing now 點(diǎn)擊拉取依賴 具體代碼演示:

  public  void  zzrHttp(){
        ZZRHttp.get(url, new ZZRCallBack.CallBackString() {
            @Override
            public void onFailure(int code, String errorMessage) {
                //http訪問出錯(cuò),此部分在主線程中工作,可以更新UI等操做。
            }
            @Override
            public void onResponse(String response) {
                System.out.println("zzrHttp  -- >  response  " +response);
                //http訪問成功,此部分在主線程中工作,可以更新UI等操作。
            }
        });
    }

以上呢就是我給大家提供的幾種鴻蒙開發(fā)中網(wǎng)絡(luò)請(qǐng)求的方式 當(dāng)然也還有其他的基于純java語言封裝的網(wǎng)絡(luò)請(qǐng)求的庫 理論上在鴻蒙上面都是可以使用的 有興趣同學(xué)可以私下多了解 我這邊由于篇幅原因 就不展開細(xì)講了。

最后總結(jié):

由于鴻蒙開發(fā)里面java ui部分使用的是java做基礎(chǔ)語言 所以使得 我們java里面提供的網(wǎng)絡(luò)請(qǐng)求的api到可以很好直接在鴻蒙上面使用 以及包括出名的okhttp okhttputils 知名框架再鴻蒙上也可以完美的使用 ,所以整個(gè)網(wǎng)絡(luò)部分請(qǐng)求的部分還算簡(jiǎn)單 當(dāng)然啦這些都還是基礎(chǔ) 更加友好的網(wǎng)絡(luò)請(qǐng)求的使用方式各位同學(xué)可以根據(jù)實(shí)際情況去適當(dāng)封裝處理 來更好實(shí)現(xiàn)的我們的需求。最后希望我的文章能幫助到各位解決問題 ,以后我還會(huì)貢獻(xiàn)更多有用的代碼分享給大家。各位同學(xué)如果覺得文章還不錯(cuò) ,麻煩給關(guān)注和star,小弟在這里謝過啦

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    中文字幕区自拍偷拍区| 91人妻人澡人人爽人人精品| 国产日韩久久精品一区| 亚洲专区中文字幕视频| 国产一区二区不卡在线播放| 欧美日韩中国性生活视频| 日韩成人h视频在线观看| 国产亚洲视频香蕉一区| 日本深夜福利视频在线| 尹人大香蕉中文在线播放| 日韩一区欧美二区国产| 欧美偷拍一区二区三区四区| 国产成人精品久久二区二区| 美女露小粉嫩91精品久久久 | 午夜福利92在线观看| 狠狠做深爱婷婷久久综合| 欧美午夜性刺激在线观看| 国产在线小视频你懂的| 欧美一区日韩一区日韩一区| 国产精品香蕉一级免费| 中文字幕日韩欧美亚洲午夜| 嫩呦国产一区二区三区av| 亚洲中文字幕在线观看黑人| 日韩一级免费中文字幕视频| 日本深夜福利在线播放| 欧美一区二区三区在线播放| 日本精品理论在线观看| 好吊妞视频只有这里有精品| 丰满少妇被粗大猛烈进出视频| 国产精品第一香蕉视频| 欧美加勒比一区二区三区| 国产熟女一区二区三区四区| 色婷婷在线视频免费播放| 男人和女人黄 色大片| 一区二区欧美另类稀缺| 国产欧美一区二区色综合| 久久精品蜜桃一区二区av| 久久国产精品熟女一区二区三区| 五月婷婷综合激情啪啪| 久久综合九色综合欧美| 国产一区二区三区成人精品|