HarmonyOS 鸿蒙Next https请求问题和base64加密问题
HarmonyOS 鸿蒙Next https请求问题和base64加密问题
问题【可以确定接口是没有问题的,给的请求参数,url,header都没有任何问题】
1. 网络请求返回报错"OAuth 2.0 Parameter: grant_type" 但是这个是有在extraData设置了的
2. 字符串转base64字符串的系统调用怎么弄,研究了很久都没找到合适的资料
a. 用ArkTS的import buffer from '[@ohos](/user/ohos).buffer',用不了
b. 用typeScript的btoa,在工程里面提示找不到方法,所以临时自己弄了一个base64的方法实现
```typescript
function stringToBase64(str: string): string {
return btoa(str);
}
// 使用示例
const myString = "Hello, World!";
const base64String = stringToBase64(myString);
console.log(base64String);
// 当使用POST请求时此字段用于传递内容
let extraData = {
'username': 'admin',
'password': '123456',
'grant_type': 'password',
'scope': 'server'
}
httpRequestPost('https://gateway.metadigital.net.cn/auth/oauth2/token', extraData)
// 请求类实现
import http from '[@ohos](/user/ohos).net.http'
import { getBase64String } from '../pages/CommonFunc'
export const BASE_URL : string = '';
export function httpRequestPost(url:string,params:any) {
url = BASE_URL + url
let httpRequest = http.createHttp()
var header = {
'Content-Type' : 'application/json',
'Tenant-id': '1',
'Authorization': 'Basic ' + getBase64String("mini:" + "mini"),
'lang': 'zh_CN'
}
let responseResult = httpRequest.request(url,{
method:http.RequestMethod.POST,
extraData:params,
header:header
})
let serverData ={
code,
data:'',
msg:''
} = {code:0,data:'',msg:''}
return responseResult.then((value)=>{
console.info('返回:'+JSON.stringify(header))
console.info('返回:'+JSON.stringify(value))
if (value.responseCode === 200) {
let result = `${value.result}`
let resultJson = JSON.parse(result)
console.log(resultJson)
serverData.data = resultJson.data
serverData.code = resultJson.code
serverData.msg = resultJson.msg
} else {
serverData.code = value.responseCode
}
return serverData
}).catch((e) => {
console.log(e)
serverData.msg = '接口调用失败'
return serverData
})
}
自定义base64加密
import * as Buffer from '[@ohos](/user/ohos).buffer';
function base64Encode(str) {
const base64Table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
let result = "";
let i = 0;
while (i < str.length) {
let char1 = str.charCodeAt(i++);
let char2 = str.charCodeAt(i++);
let char3 = str.charCodeAt(i++);
let enc1 = char1 >> 2;
let enc2 = ((char1 & 3) << 4) | (char2 >> 4);
let enc3 = ((char2 & 15) << 2) | (char3 >> 6);
let enc4 = char3 & 63;
if (isNaN(char2)) {
enc3 = enc4 = 64;
} else if (isNaN(char3)) {
enc4 = 64;
}
result +=
base64Table.charAt(enc1) +
base64Table.charAt(enc2) +
base64Table.charAt(enc3) +
base64Table.charAt(enc4);
}
return result;
}
export function getBase64String(str) {
let originalString = str ? str : "mini:mini";
let base64String = base64Encode(originalString);
console.log("Base64 编码后的字符串:" + base64String);
return base64String;
}
请求返回
03-19 20:32:46.978 21841-10012 0FEFE/JsApp com.example.myapplication I Base64 编码后的字符串:bWluaTptaW5p
03-19 20:32:47.520 21841-10012 0FEFE/JsApp com.example.myapplication I 返回:{“Content-Type”:“application/json”,“Tenant-id”:“1”,“Authorization”:“Basic bWluaTptaW5p”,“lang”:“zh_CN”}
03-19 20:32:47.520 21841-10012 0FEFE/JsApp com.example.myapplication I 返回:{“responseCode”:400,“cookies”:"",“header”:{“cache-control”:“no-cache, no-store, max-age=0, must-revalidate”,“connection”:“keep-alive”,“content-type”:“application/json; charset=UTF-8”,“date”:“Thu, 21 Mar 2024 01:48:16 GMT”,“expires”:“0”,“pragma”:“no-cache”,“server”:“nginx”,“transfer-encoding”:“chunked”,“x-content-type-options”:“nosniff”,“x-frame-options”:“DENY”,“x-xss-protection”:“1; mode=block”},“result”:"{“code”:1,“msg”:“OAuth 2.0 Parameter: grant_type”,“data”:null}",“resultType”:0}
更多关于HarmonyOS 鸿蒙Next https请求问题和base64加密问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
extraData不是这么传的,它是key和value拼接起来的字符串,形如:key1=value1&key2=value2
下面是使用系统提供的api进行base64编码的方法:
static encode(text: string): string {
let textEncoder = new util.TextEncoder();
let array = textEncoder.encodeInto(text)
let helper = new util.Base64Helper();
return helper.encodeToStringSync(array);
}
static decode(data: string | Uint8Array): string {
let helper = new util.Base64Helper();
let result = helper.decodeSync(data)
let decoder = util.TextDecoder.create('utf-8')
return decoder.decodeWithStream(result)
}
更多关于HarmonyOS 鸿蒙Next https请求问题和base64加密问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
您好,是改成这样吗
我的代码是参考官方文档上写的,一直没有请求成功
按照你的方式改也是一样,可能是哪里改错了
let params = 'username=admin&password=123456&grant_type=password&scope=server'
httpRequestPost('/auth/oauth2/token?', params)
针对帖子标题“HarmonyOS 鸿蒙Next https请求问题和base64加密问题”,以下是对这两个问题的专业回答:
Https请求问题:
在HarmonyOS鸿蒙系统中进行HTTPS请求时,你需要确保网络请求库(如OkHttp、Retrofit等,若使用Java系库则不适用此回答,考虑到限制)已正确集成并配置。此外,需验证SSL/TLS证书的有效性,以及服务器地址和端口的正确性。若遇到请求失败,检查是否因网络权限、防火墙或代理设置导致。确保应用已申请必要的网络权限,并正确处理网络异常。
Base64加密问题:
HarmonyOS提供了Base64编码和解码的功能。在编码时,使用Base64.encodeToString
方法;解码时,使用Base64.decode
方法。确保输入的字符串是有效的Base64编码,且在编码和解码过程中字符集保持一致。若解码后数据不正确,检查输入字符串是否包含非法字符或格式错误。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html,