精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙OS(ArkTS) 案例:【使用http網(wǎng)絡(luò)請(qǐng)求框架加載驗(yàn)證碼】

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-27 17:35 ? 次閱讀

需求:加載驗(yàn)證碼;1.下載驗(yàn)證碼圖像文件;2.獲取header里面驗(yàn)證碼ID

踩坑--踩坑--踩坑

根據(jù)文檔使用 request.downloadFile 請(qǐng)求,官方示例:

// pages/xxx.ets
// 將網(wǎng)絡(luò)資源文件下載到應(yīng)用文件目錄并讀取一段內(nèi)容
import common from '@ohos.app.ability.common';
import fs from '@ohos.file.fs';
import request from '@ohos.request';

// 獲取應(yīng)用文件路徑
let context = getContext(this) as common.UIAbilityContext;
let filesDir = context.filesDir;

try {
  request.downloadFile(context, {
    url: 'https://xxxx/xxxx.txt',
    filePath: filesDir + '/xxxx.txt'
  }).then((downloadTask) = > {
    downloadTask.on('complete', () = > {
      console.info('download complete');
      let file = fs.openSync(filesDir + '/xxxx.txt', fs.OpenMode.READ_WRITE);
      let buf = new ArrayBuffer(1024);
      let readLen = fs.readSync(file.fd, buf);
      console.info(`The content of file: ${String.fromCharCode.apply(null, new Uint8Array(buf.slice(0, readLen)))}`);
      fs.closeSync(file);
    })
  }).catch((err) = > {
    console.error(`Invoke downloadTask failed, code is ${err.code}, message is ${err.message}`);
  });
} catch (err) {
  console.error(`Invoke downloadFile failed, code is ${err.code}, message is ${err.message}`);
}復(fù)制

里面存在一個(gè)解決不到的問(wèn)題是,獲取不到header里面驗(yàn)證碼ID,downloadTask 無(wú)法獲取....只能換常規(guī)方法獲取了。

換 httpRequest.request 來(lái)請(qǐng)求,示例代碼如下:

/**
   * 下載文件(驗(yàn)證碼使用)
   */
  static httpFileDownload(url: string, params?: any): Promise< ResponseResultJson > {
    LogUtils.i("下載文件URL:" + url + "n請(qǐng)求參數(shù):" + (params != undefined ? "n請(qǐng)求參數(shù):" + JSON.stringify(params) : "無(wú)參數(shù)"));
    //
    let httpRequest = http.createHttp();
    httpRequest.on('headersReceive', (header) = > {
      //用于訂閱HTTP響應(yīng)頭,此接口會(huì)比request請(qǐng)求先返回。可以根據(jù)業(yè)務(wù)需要訂閱此消息
    });
    //
    let responseResult = httpRequest.request(url, {
      method: http.RequestMethod.GET,
      readTimeout: RequestConstants.readTimeout,
      connectTimeout: RequestConstants.connectTimeout,
      header: {
        'Content-Type': ContentType.JSON
      },
      expectDataType: http.HttpDataType.ARRAY_BUFFER, // 可選,指定返回?cái)?shù)據(jù)的類(lèi)型
      extraData: params
    });
    let responseResultJson = new ResponseResultJson();
    return responseResult.then(async (responseResult: http.HttpResponse) = > {
      LogUtils.i("文件下載請(qǐng)求響應(yīng)URL:" + url + "n響應(yīng)結(jié)果:" + "n" + JSON.stringify(responseResult));
      if (responseResult.responseCode === ResponseConstants.RESPONSE_SUCCESS) {
        let header = responseResult.header
        LogUtils.i('解析響應(yīng) header n' + JSON.stringify(header));
        let headerJson = JSON.stringify(header)
        let headerObj = JSON.parse(headerJson)
        let sessionId = headerObj.sessionid as string
        let serverModel = headerObj.servermodel as string
        let encryptType = headerObj.encrypttype as string
        //保存 header
        await AppHelper.commitSessionId(sessionId);
        await AppHelper.commitServerModel(serverModel);
        await AppHelper.commitEncryptType(encryptType);
        //解析文件
        let result = responseResult.result as ArrayBuffer
        // let filePath = FileConstants.rootFile + "/verifyCode_" + TimeExUtils.getNowYMDHMS1() + '.jpg'
        let isHave = fs.accessSync(FileConstants.pathFile) //檢查文件目錄是否存在
        if (!isHave) fs.mkdirSync(FileConstants.pathFile) //創(chuàng)建目錄
        //
        let filePath = FileConstants.pathFile + "verifyCode_" + TimeExUtils.getNowYMDHMS1() + '.jpg'
        let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
        fs.writeSync(file.fd, result); //將數(shù)據(jù)寫(xiě)入文件
        fs.closeSync(file); //關(guān)閉文件
        //
        LogUtils.i("保存文件成功:n" + filePath + "t" + await FileUtils.getPathSize(filePath));
        //結(jié)果
        responseResultJson.code = ResponseConstants.CODE_SUCCESS
        responseResultJson.isSuccess = true
        responseResultJson.status = responseResult.responseCode
        responseResultJson.serverModel = serverModel
        responseResultJson.filePath = filePath
      } else {
        responseResultJson.code = ResponseConstants.CODE_ERROR;
        responseResultJson.message = "業(yè)務(wù)異常:" + JSON.stringify(responseResult)
        responseResultJson.isSuccess = false
      }
      return responseResultJson;
    }).catch((error) = > {
      LogUtils.i("文件下載請(qǐng)求響應(yīng)URL:" + url + "n請(qǐng)求異常:n" + JSON.stringify(error))
      responseResultJson.code = ResponseConstants.CODE_ERROR;
      responseResultJson.message = "請(qǐng)求異常:n" + JSON.stringify(error)
      responseResultJson.isSuccess = false
      return responseResultJson;
    });
  }復(fù)制

里面無(wú)用工具類(lèi)可以不用在意...里面獲取header可以有2種方法

鴻蒙OS開(kāi)發(fā)更多內(nèi)容↓點(diǎn)擊HarmonyOSOpenHarmony技術(shù)
鴻蒙技術(shù)文檔開(kāi)發(fā)知識(shí)更新庫(kù)gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md在這。或+mau123789學(xué)習(xí),是v喔

方法一:

搜狗高速瀏覽器截圖20240326151547.png

資料拿取+mau123789vhttpRequest.on('headersReceive', (header) = > {
      //用于訂閱HTTP響應(yīng)頭,此接口會(huì)比request請(qǐng)求先返回。可以根據(jù)業(yè)務(wù)需要訂閱此消息
    });

方法二:

let header = responseResult.header
        LogUtils.i('解析響應(yīng) header n' + JSON.stringify(header));
        let headerJson = JSON.stringify(header)
        let headerObj = JSON.parse(headerJson)
        let sessionId = headerObj.sessionid as string
        let serverModel = headerObj.servermodel as string
        let encryptType = headerObj.encrypttype as string

獲取的值是一樣的。

獲取驗(yàn)證碼文件關(guān)鍵代碼:

1.參數(shù)里面的 expectDataType 需要設(shè)置為 http.HttpDataType.ARRAY_BUFFER;

  1. 結(jié)果轉(zhuǎn)換為ArrayBuffer,let result = responseResult.result as ArrayBuffer

運(yùn)行日志:

cke_2126.png

運(yùn)行效果:

cke_6226.png

完畢啦!!!! 驗(yàn)證碼獲取成功了!!!!

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1967

    瀏覽量

    30020
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3660

    瀏覽量

    16158
  • 鴻蒙OS
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    4369
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    用基于gin框架的Go語(yǔ)言來(lái)實(shí)現(xiàn)手機(jī)號(hào)發(fā)送短信驗(yàn)證碼登錄

    現(xiàn)在大多數(shù)app或wap都實(shí)現(xiàn)了通過(guò)手機(jī)號(hào)獲取驗(yàn)證碼進(jìn)行驗(yàn)證登錄,下面來(lái)看下用go來(lái)實(shí)現(xiàn)手機(jī)號(hào)發(fā)送短信驗(yàn)證碼登錄的過(guò)程,基于的框架是gin 。
    的頭像 發(fā)表于 07-20 09:36 ?4377次閱讀
    用基于gin<b class='flag-5'>框架</b>的Go語(yǔ)言來(lái)實(shí)現(xiàn)手機(jī)號(hào)發(fā)送短信<b class='flag-5'>驗(yàn)證碼</b>登錄

    鴻蒙原生應(yīng)用/元服務(wù)開(kāi)發(fā)-Serverless賬戶(hù)驗(yàn)證碼的問(wèn)題

    在應(yīng)用/元服務(wù)早期使用過(guò)程中,-Serverless賬戶(hù)驗(yàn)證碼的格式是[AGC][應(yīng)用/元服務(wù)名稱(chēng)],如下圖。 但是,在最近,[應(yīng)用/元服務(wù)]名稱(chēng)直接變成了【default】,用戶(hù)收到這種驗(yàn)證碼后,心里存有疑慮的,這是哪里配置或者設(shè)置的問(wèn)題嗎?大家有遇到同樣的問(wèn)題嗎?如何
    發(fā)表于 12-27 15:55

    無(wú)法驗(yàn)證郵箱,總是提示驗(yàn)證碼錯(cuò)誤,驗(yàn)證碼明明是正確的。

    `無(wú)法驗(yàn)證郵箱,總是提示驗(yàn)證碼錯(cuò)誤,驗(yàn)證碼明明是正確的。是不是系統(tǒng)的bug?`
    發(fā)表于 05-12 10:41

    平臺(tái)是如何高效的破解市面上各家驗(yàn)證碼平臺(tái)的各種形式驗(yàn)證碼的?

    驗(yàn)證碼與打平臺(tái)的對(duì)抗講起。何為打平臺(tái)?打平臺(tái)的基本原理是利用人工智能技術(shù)實(shí)現(xiàn)對(duì)驗(yàn)證碼設(shè)計(jì)原理的突破。其工作流程如下圖所示:以前黑灰產(chǎn)要
    發(fā)表于 11-01 15:21

    多樣變換的手寫(xiě)驗(yàn)證碼自動(dòng)識(shí)別算法

    研究驗(yàn)證碼自動(dòng)識(shí)別技術(shù)可以進(jìn)一步提升人識(shí)別驗(yàn)證碼的可讀性,增強(qiáng)機(jī)器識(shí)別的難度,從而提高網(wǎng)絡(luò)安全性。針對(duì)目前提出的驗(yàn)證碼識(shí)別方法基本都是采用光學(xué)字符識(shí)別(OCR)方法對(duì)機(jī)器寫(xiě)的標(biāo)準(zhǔn)字符進(jìn)
    發(fā)表于 12-20 14:14 ?0次下載

    SQLyog_12.4.1_帶驗(yàn)證碼

    SQLyog_12.4.1_帶驗(yàn)證碼.rar
    發(fā)表于 04-12 21:03 ?22次下載

    以一個(gè)真實(shí)網(wǎng)站的驗(yàn)證碼為例,實(shí)現(xiàn)了基于一下KNN的驗(yàn)證碼識(shí)別

    很多網(wǎng)站登錄都需要輸入驗(yàn)證碼,如果要實(shí)現(xiàn)自動(dòng)登錄就不可避免的要識(shí)別驗(yàn)證碼。本文以一個(gè)真實(shí)網(wǎng)站的驗(yàn)證碼為例,實(shí)現(xiàn)了基于一下KNN的驗(yàn)證碼識(shí)別。
    的頭像 發(fā)表于 12-24 17:27 ?7749次閱讀

    驗(yàn)證碼層出不窮?試試這個(gè)自動(dòng)跳過(guò)驗(yàn)證碼的工具

    目前網(wǎng)絡(luò)上越來(lái)越多使用驗(yàn)證碼了,驗(yàn)證碼的本意是阻止機(jī)器刷流量擠占服務(wù)器資源,這本來(lái)無(wú)可厚非;但是驗(yàn)證碼已經(jīng)變得越來(lái)越過(guò)分,別說(shuō)機(jī)器人了,連人也經(jīng)常沒(méi)法辨認(rèn)!這就相當(dāng)煩了,特別是被廣泛使
    的頭像 發(fā)表于 11-15 10:42 ?5918次閱讀

    驗(yàn)證碼太麻煩,自動(dòng)跳過(guò)驗(yàn)證碼神器試一試

    目前網(wǎng)絡(luò)上越來(lái)越多使用驗(yàn)證碼了,驗(yàn)證碼的本意是阻止機(jī)器刷流量擠占服務(wù)器資源,這本來(lái)無(wú)可厚非;但是驗(yàn)證碼已經(jīng)變得越來(lái)越過(guò)分,別說(shuō)機(jī)器人了,連人也經(jīng)常沒(méi)法辨認(rèn)! 這就相當(dāng)煩了,特別是被廣泛
    的頭像 發(fā)表于 11-15 11:15 ?1w次閱讀

    OpenHarmony上使用的Http網(wǎng)絡(luò)框架教程

    簡(jiǎn)介 鴻蒙上使用的Http網(wǎng)絡(luò)框架,里面包含純Java實(shí)現(xiàn)的HttpNet,類(lèi)似okhttp使用,支持同步和異步兩種請(qǐng)求方式;還有
    發(fā)表于 04-12 11:13 ?4次下載

    一個(gè)短信驗(yàn)證碼爆破重置

    以前倒是遇到過(guò)不少四位數(shù)驗(yàn)證碼爆破的,但是這種可以結(jié)合短信遍歷,一個(gè)短信驗(yàn)證碼只能驗(yàn)證三次的,最后能成功利用的還是第一次遇到,關(guān)鍵還是這里不存在圖片驗(yàn)證碼或者行為
    的頭像 發(fā)表于 09-07 09:14 ?4983次閱讀

    驗(yàn)證碼到底在驗(yàn)證啥?聊一聊驗(yàn)證碼是怎么為難我們?nèi)祟?lèi)的

    在文章開(kāi)頭,老狐先給大家玩一個(gè)驗(yàn)證碼的游戲,猜出圖中驗(yàn)證碼字母。
    的頭像 發(fā)表于 08-12 10:25 ?2047次閱讀
    <b class='flag-5'>驗(yàn)證碼</b>到底在<b class='flag-5'>驗(yàn)證</b>啥?聊一聊<b class='flag-5'>驗(yàn)證碼</b>是怎么為難我們?nèi)祟?lèi)的

    Java 中驗(yàn)證碼的使用

    今天我們講一下在 Java 中驗(yàn)證碼的使用。 驗(yàn)證碼生成 本效果是利用easy-captcha工具包實(shí)現(xiàn),首先需要添加相關(guān)依賴(lài)到pom.xml中,代碼如下: com .github.whvcse
    的頭像 發(fā)表于 09-25 11:11 ?988次閱讀
    Java 中<b class='flag-5'>驗(yàn)證碼</b>的使用

    SpringBoot分布式驗(yàn)證碼登錄方案

    傳統(tǒng)的項(xiàng)目大都是基于session交互的,前后端都在一個(gè)項(xiàng)目里面,比如傳統(tǒng)的SSH項(xiàng)目或者一些JSP系統(tǒng),當(dāng)前端頁(yè)面觸發(fā)到獲取驗(yàn)證碼請(qǐng)求,可以將驗(yàn)證碼里面的信息存在上下文中,所以登錄的時(shí)候只需要 用戶(hù)名、密碼、
    的頭像 發(fā)表于 10-12 17:34 ?694次閱讀
    SpringBoot分布式<b class='flag-5'>驗(yàn)證碼</b>登錄方案

    鴻蒙OS開(kāi)發(fā)實(shí)例:【HarmonyHttpClient】網(wǎng)絡(luò)框架

    鴻蒙上使用的Http網(wǎng)絡(luò)框架,里面包含純Java實(shí)現(xiàn)的HttpNet,類(lèi)似okhttp使用,支持同步和異步兩種請(qǐng)求方式;還有
    的頭像 發(fā)表于 04-12 16:58 ?801次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b>開(kāi)發(fā)實(shí)例:【HarmonyHttpClient】<b class='flag-5'>網(wǎng)絡(luò)</b><b class='flag-5'>框架</b>