鴻蒙-使用Charles抓包

目錄

    • 前言
    • 鴻蒙應用中的網絡請求
      • rcp 抓包
      • http 抓包
    • 以下是排查過程,沒啥參考價值
      • 發送文件
      • http 抓包報錯

前言

抓包,對于各位開發者應該不陌生,各種抓包工具應該的都聽說過,像 charles、fiddler、Wireshark?等。在 Android 和 iOS 上抓包都挺簡單的,把證書存放到手機上,然后安裝一下,網絡設置里面配置一下代理,代碼里面忽略一下證書校驗或者信任一下用戶證書就好了。
但在鴻蒙手機上,似乎第一步把證書存放到手機上就卡住了一部分人。

鴻蒙應用中的網絡請求

在開發文檔中有提到兩種網絡請求的方法,一開始是用 http,再后來推薦使用 rcp。現在上架的應用估計大部分是用的 http 或者axios 這個封裝好的框架進行的網絡請求。

rcp 抓包

在官方文檔中,并沒有找到http 如何忽略證書校驗或者信任用戶證書,只翻到了如何使用自定義證書。
嘿嘿,問題不大,因為我們用的是 rcp 做的網絡請求,自己封裝了一下。并且在官方文檔中找到了跳過證書校驗的配置:

SecurityConfiguration接口允許開發人員在會話中配置與安全相關的設置,包括證書和服務器身份驗證。

其中有個屬性:remoteValidation,解釋說明是證書頒發機構(CA),用于驗證遠程服務器的身份。默認值為’system’。
我們可以配置的類型有:"system""skip"CertificateAuthorityValidationCallback,其中默認值為’system’。
如果未設置此字段,系統CA將被用于驗證遠程服務器的標識。
‘system’:表示使用系統CA配置。
‘skip’:跳過驗證。
CertificateAuthority:證書頒發機構(CA)驗證。
ValidationCallback:自定義證書校驗。

這不就簡單了么,整個 demo 試一下

        Button('charles抓包 rcp').onClick((_)=>{const session = rcp.createSession();const request = new rcp.Request('https:/xxxxxx','GET');request.configuration = {security: {remoteValidation: 'skip',},};session.fetch(request).then((rep: rcp.Response) => {console.info(`Response succeeded: ${rep}`);}).catch((err: BusinessError) => {console.error(`Response err: Code is ${err.code}, message is ${err.message}`);});});

打開抓包軟件,手機 wifi 設置里面配置一下代理,就可以看到能抓包了,甚至不需要安裝證書。

http 抓包

由于沒有找到如何忽略證書,就和 Android 抓包一樣,先把證書安裝到手機上。
在抓包軟件中導出證書,注意查看一下證書的有效期,當然安裝抓包軟件的電腦上也需要安裝一下證書,并且需要信任才行。
然后使用hdc file send將證書發送到手機上,問題就在這里,不知道手機的文件夾目錄是啥。

hdc file send charles-ssl-proxying-certificate.pem /storage/media/100/local/files/Docs/Download/charles.pem

這里的目標路徑為/storage/media/100/local/files/Docs/Download/,也就是我們在手機文件管理里面看到的Download文件夾。這里需要注意的是,需要在后面加目標文件的名字,這也是和Android的adb psuh最大的區別,adb 只需要指定到文件夾就好,相當于把文件復制到這個文件夾中,復制之后的名字可以不指定。
我們可以在 DevEco 的右下角Device File Browser把文件夾展開看一下:

鴻蒙手機文件夾

然后我們打開證書安裝頁面:hdc shell aa start -a MainAbility -b com.ohos.certmanager ,或者在手機設置–>隱私和安全–>高級–>證書與憑據–>從存儲設備安裝,點擊 CA 證書,會彈出警告彈窗,我們點擊繼續,找到我們剛才發送到設備的證書,完成安裝
在這里插入圖片描述

隨后擼一坨代碼測試一下

        Button('charles抓包 http').onClick((_)=>{let httpRequest = http.createHttp();httpRequest.request(// 填寫HTTP請求的URL地址,可以帶參數也可以不帶參數。URL地址需要開發者自定義。請求的參數可以在extraData中指定"https://xxxxx",{method: http.RequestMethod.GET, // 可選,默認為http.RequestMethod.GET// 開發者根據自身業務需要添加header字段header: {'Content-Type': 'application/x-www-form-urlencoded'},expectDataType: http.HttpDataType.STRING, // 可選,指定返回數據的類型priority: 1, // 可選,默認為1connectTimeout: 60000, // 可選,默認為60000msreadTimeout: 60000, // 可選,默認為60000msusingProxy: true, // 可選,默認不使用網絡代理,自API 10開始支持該屬性// caPath:filePath}, (err: BusinessError, data: http.HttpResponse) => {if (!err) {// data.result為HTTP響應內容,可根據業務需要進行解析console.info('Result:' + JSON.stringify(data.result));console.info('code:' + JSON.stringify(data.responseCode));// data.header為HTTP響應頭,可根據業務需要進行解析console.info('header:' + JSON.stringify(data.header));console.info('cookies:' + JSON.stringify(data.cookies)); // 8+// 當該請求使用完畢時,調用destroy方法主動銷毀httpRequest.destroy();} else {console.error('error:' + JSON.stringify(err));// 當該請求使用完畢時,調用destroy方法主動銷毀httpRequest.destroy();console.error("flutter 鴻蒙打點:")}});})

同樣的操作,熟悉的配方就可以看到抓包結果了。

以下是排查過程,沒啥參考價值

發送文件

一開始使用 hdc 發送文件一直失敗,一個原因是找不到正確的文件夾,另外一個原因就是沒有加指定目標文件的文件名,路徑只寫到了某個文件夾。
還想嘗試使用手機上登錄微信,通過微信發送。
藍牙配對一下,使用藍牙發送。
電腦上搞個 ftp,手機上訪問下載一下。
這些方案應該都能解決文件傳輸問題,但我就想用 hdc 搞定一下,折騰了好半天,搜了一摞一摞的教程。。。

http 抓包報錯

安裝完證書,配置好代理之后抓包時發現 http 請求失敗,報錯2300060 遠程服務器SSL證書或SSH秘鑰不正確.
剛開始以為是在 http 請求中需求配置點什么屬性,比如usingProxy這個屬性:可以配置屬性值類型boolean或者HttpProxy
首先設置為 true,抓包還是不行。
設置為HttpProxy對象,地址就寫電腦的 ip 和抓包軟件中設置的對應的端口號,結果還是報錯。

然后就以為需要把證書拷貝到沙箱目錄,然后走自定義證書那一套流程,結果還是不行,照樣是2300060這個錯誤碼。

之后就去翻官方文檔,看到有個提示
http_2300060報錯提示

然后看了下證書有效期,果然是證書過期了,但奇怪的是在 Android 上可以抓包。解決方案就是在抓包軟件里面重置一下證書,再重新導出一下,安裝到手機上就可以了。


為啥會關心這兩個網絡請求抓包:因為有個立項比較早的項目,是由前端主導的,當時還沒有 rcp,于是選擇了axios。后面又立項了另外一個項目,是客戶端主導的,并且這時候官方文檔也開始推薦使用 rcp 了。


以上

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78750.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78750.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78750.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

回顧|Apache Cloudberry? (Incubating) Meetup·2025 杭州站

2025 年 4 月 19 日,由酷克數據與中啟乘數聯合舉辦的 Apache Cloudberry? (Incubating) Meetup 杭州站在浙江省杭州市濱江區濱江會展中心成功舉辦。本次活動邀請了 Cloudberry PPMC 團隊成員、活躍內核貢獻者以及中興 EBASE-A、阿里云 ADB-PG、網易、中啟乘數等多…

Linux網絡編程 深入Linux網絡棧:原始套接字鏈路層實戰解析

之前我們編程都是在應用層,只需在地址結構體中傳 地址與端口號。然后協議棧在傳輸層,與網絡層幫我們進行數據的封裝。但這里我們要學的是在鏈路層進行編程 這里我想說一下,當數據到達鏈路層,有三個分支:ARP&#xff0c…

用python寫一個相機選型的簡易程序

最近有點忙,上來寫的時間不多。 今天就把之前寫的一個選型的簡易程序,供大家參考。 代碼: import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,QLabel, QLineEdit, QPushButton, QGro…

【實戰篇】數字化打印——打印格式設計器的功能說明

前言 myBuilder內置了覆蓋豐富場景的打印格式設計器,效果統一,功能完善。 設計器一:小票 用于設計小票、水單等滾筒紙張的場景,例如:超市購物小票 主要功能 打印格式的保存、下載、上傳設計時功能:撤銷…

Qt 中 QSQLITE 和 QODBC 數據庫連接的區別

Qt 中 QSQLITE 和 QODBC 數據庫連接的區別 這兩行代碼都是創建 Qt 數據庫連接,但使用了不同的數據庫驅動和連接方式: 1. QSqlDatabase::addDatabase("QSQLITE") 特點: 使用 SQLite 數據庫的 原生驅動直接與 SQLite 數據庫文件(…

Eigen核心矩陣/向量類 (Matrix, Vector, Array)

1. Matrix 類&#xff08;稠密矩陣&#xff09; 模板參數 cpp Matrix<Scalar, Rows, Cols, Options, MaxRows, MaxCols> Scalar: 元素類型&#xff08;如 float, double, int&#xff09;。 Rows/Cols: 行數和列數&#xff08;Dynamic 表示動態大小&#xff09;。 O…

汽車免拆診斷案例 | 2016款奔馳C200L車組合儀表上多個故障燈偶爾點亮

故障現象 一輛2016款奔馳C200L車&#xff0c;搭載274 920發動機&#xff0c;累計行駛里程約為13萬km。該車組合儀表上的防側滑故障燈、轉向助力故障燈、安全氣囊故障燈等偶爾異常點亮&#xff0c;且此時將擋位置于R擋&#xff0c;中控顯示屏提示“后視攝像頭不可用”&#xff…

實現 Babylon.js 鼠標輸入管理單例 (MouseController) 的最佳實踐

在現代 Web3D 開發中&#xff0c;高效的輸入管理是創建流暢交互體驗的關鍵。本文將詳細介紹如何在 Babylon.js 中實現一個強大的鼠標輸入管理單例&#xff0c;幫助你優雅地處理所有指針事件。 為什么需要鼠標輸入管理單例&#xff1f; 在復雜的 3D 場景中&#xff0c;鼠標/指…

【LLM+Code】Cursor Agent 46.11 版本PromptTools最細致解讀

一、cursor Agent cursor的agent模式, 多說一句&#xff0c;cursor目前我付費使用&#xff0c;是我目前為止使用過AI coding工具里最喜歡的一個&#xff0c;cursor nb&#xff01; https://gist.github.com/sshh12/25ad2e40529b269a88b80e7cf1c38084version&#xff1a;46.11 …

Flask + ajax上傳文件(二)--多文件上傳

Flask多文件上傳完整教程 本教程將詳細介紹如何使用Flask實現多文件上傳功能,并使用時間戳為上傳文件自動命名,避免文件名沖突。 一、環境準備 確保已安裝Python和Flask pip install flask項目結構 flask_upload/ ├── app.py ├── upload/ # 上傳文…

多級緩存入門:Caffeine、Lua、OpenResty、Canal

之前寫過——Google Guava Cache簡介 本文系統學習一下多級緩存 目錄 0.什么是多級緩存商品查詢業務案例導入1.JVM進程緩存初識Caffeine實現JVM進程緩存2.Lua語法入門HelloWorld數據類型、變量和循環函數、條件控制3.Nginx業務編碼實現多級緩存安裝OpenRestyOpenResty快速入門…

Python + Playwright:如何在Docker 容器運行測試?

Python + Playwright:如何在Docker 容器運行測試? 前言一、簡介二、環境準備1. 安裝 DockerWindows 用戶macOS 用戶Linux 用戶(以 Ubuntu 為例)2. 啟動 browserless 服務拉取 browserless 鏡像啟動 browserless 容器驗證 browserless 是否啟動成功三、創建自動化測試項目1.…

語音合成之四大語言模型(LLM)與TTS的深度融合

基于LLM的語音合成 1.技術架構1.1 LlaSA1.2 CosyVoice (和 CosyVoice2)1.3 SparkTTS 2 特性對比2.1 零樣本語音克隆2.2 多語種支持2.3 可控語音生成2.4 計算效率和模型大小 總結 當前&#xff0c;在大型語言模型&#xff08;Large Language Models&#xff0c;LLMs&#xff09;…

使用 Conda 創建新環境

使用 Conda 創建新環境 在使用 Conda 進行包管理和環境隔離時&#xff0c;創建新環境是一個非常常見的操作。通過創建獨立的環境&#xff0c;可以避免不同項目之間的依賴沖突&#xff0c;并且能夠靈活地管理各個項目的運行環境。 以下是使用 Conda 創建和管理新環境的詳細步驟…

Unity AssetBundle (AB) 打包詳解

AssetBundle 是 Unity 提供的一種資源打包機制&#xff0c;允許開發者將游戲資源&#xff08;如模型、紋理、預制體等&#xff09;打包成獨立的文件&#xff0c;便于動態加載和熱更新。 一、AssetBundle 基礎概念 1. 什么是 AssetBundle 資源壓縮包&#xff0c;包含序列化資源…

Python flask入門

Python flask入門 一、路由1.1 常規路由1.2 動態路由1.3 路由的其他高級用法 二、變量規則2.1 示例1&#xff1a;字符串類型&#xff08;默認&#xff09;2.2 示例2&#xff1a;整數類型2.3 示例3&#xff1a;路徑類型 三、自定義轉換器3.1 核心組件詳解3.2 工作流程詳解 四、f…

AI賦能守護行車安全新防線,基于YOLOv5全系列【n/s/m/l/x】參數模型開發構建駕駛車輛場景下駕駛員疲勞分心駕駛行為智能檢測預警系統

在當今社會&#xff0c;隨著科技生產力的飛速發展&#xff0c;汽車早已成為人們日常出行不可或缺的交通工具。它不僅極大地提高了人們的出行效率&#xff0c;也為生活帶來了諸多便利。然而&#xff0c;隨著汽車保有量的不斷增加&#xff0c;交通安全問題也日益凸顯。疲勞駕駛和…

onloyoffice歷史版本功能實現,版本恢復功能,編輯器功能實現 springboot+vue2

文章目錄 onloyoffice歷史版本功能實現&#xff0c;版本恢復功能&#xff0c;編輯器功能實現 springbootvue2前提 需要注意把這個 (改成自己服務器的ip或者域名) 改成 自己服務器的域名或者地址我使用的onloyoffice版本 8.1.3.41. onloyoffice服務器部署 搜索其他文章2. 前段代…

概率論與統計(不確定性分析)主要應用在什么方面?涉及到具體知識是什么?

用戶問的是概率論與統計&#xff08;不確定性分析&#xff09;的主要應用方面&#xff0c;涉及的具體知識以及具體公式。首先&#xff0c;我需要確定概率論與統計在哪些領域有應用&#xff0c;比如工程、金融、醫學、數據科學等等。然后&#xff0c;具體知識部分應該包括概率論…

如何利用快照與備份快速恢復服務器的數據

在服務器上利用**快照&#xff08;Snapshot&#xff09;**和**備份&#xff08;Backup&#xff09;**快速恢復數據&#xff0c;可顯著減少停機時間并確保業務連續性。以下是具體操作步驟和最佳實踐&#xff1a; --- ### **1. 快照&#xff08;Snapshot&#xff09;恢復** **適…