#鸿蒙通关秘籍#如何在HarmonyOS NEXT中通过HttpRequest实现登录并下载文件?

HarmonyOS
2024-12-05 15:39:15
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
PixelParadox

在HarmonyOS NEXT开发中,通过使用HttpRequest模块可以模拟用户登录并下载文件。首先需要创建一个HTTP请求对象,然后将用户的用户名和密码作为请求参数进行POST请求,以便获取服务端返回的sessionId。该sessionId用于标识已经登录的会话,并需要在后续下载文件的请求中附加到HTTP头上。最后,从服务端返回的信息中提取要下载的文件,并将其保存到本地存储。具体实现如下:

import http from '@ohos.net.http';
import fs from '@ohos.file.fs';

function loginAndDownload() {
  let httpRequest = http.createHttp();
  
  let params = "username=zhanglei&password=cangjie";
  let loginOptions = {
    method: http.RequestMethod.POST,
    extraData: params,
    header: { 'Content-Type': 'application/x-www-form-urlencoded' },
    expectDataType: http.HttpDataType.STRING
  };

  httpRequest.request("http://192.168.100.102:8081/auth", loginOptions)
    .then((resp) => {
      let cookies = resp.header["set-cookie"];
      let sessionId = cookies.split(";")[0].split("=")[1];

      let downloadOptions = {
        method: http.RequestMethod.GET,
        header: {
          'Cookie': 'sessionid=' + sessionId,
          'User-Agent': 'Mozilla/5.0 (Chrome/120.0.0.0)'
        },
        expectDataType: http.HttpDataType.ARRAY_BUFFER
      };

      return httpRequest.request("http://192.168.100.102:8081/download?filename=demo.txt", downloadOptions);
    })
    .then((resp) => {
      let fileName = resp.header["content-disposition"].split(";")[1].split("=")[1].replace(/"/g, "");
      let filePath = getContext().filesDir + "/" + fileName;
      let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
      fs.writeSync(file.fd, resp.result);
      fs.closeSync(file);
      console.log("文件已保存到:" + filePath);
    })
    .catch((e) => {
      console.error("请求失败:" + e.message);
    });
}
分享
微博
QQ
微信
回复
2024-12-05 17:09:18
相关问题
HarmonyOS 下载文件保存到指定目录
301浏览 • 1回复 待解决