HarmonyOS 鸿蒙Next:api6,js语言,系统自带的http库发送请求,返回的header不是标准json格式
HarmonyOS 鸿蒙Next:api6,js语言,系统自带的http库发送请求,返回的header不是标准json格式
开发环境:api6, 使用 js 语言开发,使用SDK 自带的 http 库发送 get 请求。
运行环境:Honor 10,鸿蒙 3.0.0
想要获取返回的 header 内容。现在问题如下
使用
httpRequest.on(‘headersReceive’, (header) => {
console.error('headersReceive–>: ’ + JSON.stringify(header));
);
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
这里的 header 值是:{“code”:202,“data”:“type error”}
当请求返回后,获取到的 data.header类型是 string,想要转成 json 对象使用 key 来获取对应的值,但 data.header 并不是标准的 json 格式,内容如下
{null:[“HTTP/1.1 200 OK”],“Transfer-Encoding”:[“chunked”],“Server”:[“nginx”],“Connection”:[“keep-alive”],“Set-Cookie”:[“web_distinct_id=5963d169-95ef-4a78-9776-53b859773878; Domain=.这里删除了脱敏; expires=Tue, 29-Oct-2024 08:18:11 GMT; HttpOnly; Max-Age=31536000; Path=/”],“Vary”:[“Cookie”],“request_id”:[“955057f820e0b57b0feb8f9f4eda892b”],“Date”:[“Mon, 30 Oct 2023 08:18:11 GMT”],“Content-Type”:[“application/json; charset=UTF-8”]}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
null 做 key 是无法解析的。
请求代码如下,是我哪里写错了么?
// 每一个httpRequest对应一个HTTP请求任务,不可复用
let httpRequest = http.createHttp();
// 用于订阅HTTP响应头,此接口会比request请求先返回。可以根据业务需要订阅此消息
// 从API 8开始,使用on(‘headersReceive’, Callback)替代on(‘headerReceive’, AsyncCallback)。 8+
httpRequest.on(‘headersReceive’, (header) => {
console.error('headersReceive–>: ’ + JSON.stringify(header));
});
httpRequest.request(
// 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定
“这里是请求地址,脱敏删除了”,
{
method: http.RequestMethod.GET, // 可选,默认为http.RequestMethod.GET
// 开发者根据自身业务需要添加header字段
header: {
‘Content-Type’: ‘application/x-www-form-urlencoded’
},
usingCache: false, // 可选,默认为true
priority: 1, // 可选,默认为1
connectTimeout: 60000, // 可选,默认为60000ms
readTimeout: 60000 // 可选,默认为60000ms
}, (err, data) => {
<span class="hljs-keyword"><span class="hljs-keyword">if</span></span> (!err) {
<span class="hljs-comment"><span class="hljs-comment">// data.result为HTTP响应内容,可根据业务需要进行解析</span></span>
<span class="hljs-comment"><span class="hljs-comment">// let header = JSON.parse(data.header.toString());</span></span>
<span class="hljs-keyword"><span class="hljs-keyword">let</span></span> header = data.header;
console.error(<span class="hljs-string"><span class="hljs-string">"header type--> "</span></span> + <span class="hljs-keyword"><span class="hljs-keyword">typeof</span></span> data.header);<span class="hljs-comment"><span class="hljs-comment">//这里打印的是 string 类型</span></span>
console.error(<span class="hljs-string"><span class="hljs-string">'Result-->:'</span></span> + <span class="hljs-built_in"><span class="hljs-built_in">JSON</span></span>.stringify(data.result));<span class="hljs-comment"><span class="hljs-comment">//这里的 result 值是正常业务返回数据</span></span>
console.error(<span class="hljs-string"><span class="hljs-string">'code-->:'</span></span> + <span class="hljs-built_in"><span class="hljs-built_in">JSON</span></span>.stringify(data.responseCode));
<span class="hljs-comment"><span class="hljs-comment">// data.header为HTTP响应头,可根据业务需要进行解析</span></span>
console.error(<span class="hljs-string"><span class="hljs-string">'header-->:'</span></span> + <span class="hljs-built_in"><span class="hljs-built_in">JSON</span></span>.stringify(data.header));<span class="hljs-comment"><span class="hljs-comment">//这里的 header 不是标准的 json 格式</span></span>
console.error(<span class="hljs-string"><span class="hljs-string">'Set-Cookie-->:'</span></span> + <span class="hljs-built_in"><span class="hljs-built_in">JSON</span></span>.stringify(header[<span class="hljs-string"><span class="hljs-string">'Set-Cookie'</span></span>]));
console.error(<span class="hljs-string"><span class="hljs-string">'cookies-->:'</span></span> + <span class="hljs-built_in"><span class="hljs-built_in">JSON</span></span>.stringify(header[<span class="hljs-string"><span class="hljs-string">'cookie'</span></span>])); <span class="hljs-comment"><span class="hljs-comment">// 8+</span></span>
} <span class="hljs-keyword"><span class="hljs-keyword">else</span></span> {
console.error(<span class="hljs-string"><span class="hljs-string">'error-->:'</span></span> + <span class="hljs-built_in"><span class="hljs-built_in">JSON</span></span>.stringify(err));
<span class="hljs-comment"><span class="hljs-comment">// 取消订阅HTTP响应头事件</span></span>
httpRequest.off(<span class="hljs-string"><span class="hljs-string">'headersReceive'</span></span>);
<span class="hljs-comment"><span class="hljs-comment">// 当该请求使用完毕时,调用destroy方法主动销毁</span></span>
httpRequest.destroy();
}
}</code><button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button></pre></div></div><br><br>关于HarmonyOS 鸿蒙Next:api6,js语言,系统自带的http库发送请求,返回的header不是标准json格式的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。
更多关于HarmonyOS 鸿蒙Next:api6,js语言,系统自带的http库发送请求,返回的header不是标准json格式的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
找HarmonyOS工作还需要会Flutter技术的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
更多关于HarmonyOS 鸿蒙Next:api6,js语言,系统自带的http库发送请求,返回的header不是标准json格式的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS的分布式技术让我实现了跨设备的无缝协作,工作效率翻倍。
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
楼主解决了 吗?我也遇到同样的问题