HarmonyOS POST请求传参?

const session = httpCore.getApiEngine();
//加密
let aesetPhone = await aesUtils.aesEncrypt(this.etPhone);
let aesetCode = await aesUtils.aesEncrypt(this.etCode);
let grant_type = 'sms_code';
let client_id = 'xxx';
let client_secret = 'xxx';
let ptc = 'YHL-APP';
const codeLogin: rcp.FormFields = {
  "grant_type": grant_type,
  "username": aesetPhone,
  "sms_code": aesetCode,
  "client_id": client_id,
  "client_secret": client_secret,
  "ptc": ptc
};
session.post(httpCore.getJointUrl()+apiService.getLoginPhone,codeLogin)
  .then(async (response) => {
    let loginResult = new LoginResult();
    loginResult = JSON.parse(JSON.stringify(response))
    console.error('=返回值===' + JSON.stringify(response));
    if (loginResult.access_token != '' || loginResult.access_token != undefined) {
    } else {
      promptAction.showToast({ message: loginResult.error_description, bottom: 100, duration: 1000 })
    }
  })
  .catch((err: BusinessError) => {
    console.error("err:" + JSON.stringify(err));
  });

这样写对吗?post表单形式的传参是这样写吗?HarmonyOS这边如何添加拦截器拦截打印?

阅读 553
1 个回答

可以参考下这个拦截器的写法:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/remote-communication-interceptor-V5\#section123091617105820

1、全局定义拦截器对象用于修改或接收数据:

//拦截器接收数据对象
class ResponseCache {
  private readonly cache: Record<string, rcp.Response> = {};
  getResponse(url: string): rcp.Response {
    return this.cache[url];
  }
  setResponse(url: string, response: rcp.Response): void {
    this.cache[url] = response;
  }
}

//自定义拦截器
class ResponseCachingInterceptor implements rcp.Interceptor {
  private readonly cache: ResponseCache;
  constructor(cache: ResponseCache) {
    this.cache = cache;
  }
  //拦截器获取数据方法定义
  intercept(context: rcp.RequestContext, next: rcp.RequestHandler): Promise<rcp.Response> {
    const url = context.request.url.href;
    const responseFromCache = this.cache.getResponse(url);
    if (responseFromCache) {
      return Promise.resolve(responseFromCache);
    }
    const promise = next.handle(context);
    promise.then((resp) => {
      resp.statusCode;
      this.cache.setResponse(url, resp);
    });
    return promise;
  }
}

2、调用rcp库能力通过定义的拦截器拿数据:

getDataByInterceptor(){
  const cache = new ResponseCache();
  const session = rcp.createSession({
    interceptors: [new ResponseCachingInterceptor(cache)]
  });
  session.get("xxx").then((response) => {
    console.info('get requestData :'+JSON.stringify(response.request))
    console.info('get headersData :'+JSON.stringify(response.headers))
    console.info('get urlData :'+JSON.stringify(response.effectiveUrl))
    console.info('cache : ' + JSON.stringify(cache))
  }).catch((err: BusinessError) => {
    console.error(`err: err code is ${err.code}, err message is ${err.message}`);
  });
}

rcp各种请求传参示例:

import rcp from '@hms.collaboration.rcp';
import Url from '@ohos.url'
import HashMap from '@ohos.util.HashMap';
//GET
let params = new HashMap<string, Object>();
params.set("username", "dail");
let mm = 'xxx';
let requestUrl = Url.URL.parseURL(mm);
const urlParams = new Url.URLParams(requestUrl.search.slice(1));
if (params) {
  params.forEach((value: object, key: string) => {
    urlParams.append(key, value.toString());
  });
}
let url = mm + '?' + urlParams.toString();
let headers : rcp.RequestHeaders = {
  "Authorization": "Bearer YOUR_ACCESS_TOKEN",
  "Content-Type": "application/json",
}
let req_get = new rcp.Request(url, "GET", headers);
// POST
const content: rcp.RequestContent = {
  "username":"dail"
}
let req_post = new rcp.Request('xxx', "POST", headers, content);
// PUT
const simpleForm: rcp.FormFields = {
  "key1": "value1",
  "key2": ["valueList0", "valueList1"],
};
let req_put = new rcp.Request('xxx', "PUT", headers, simpleForm);
// DELETE
let req_delete = new rcp.Request('xxx', "DELETE", headers, content);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进