HarmonyOS 鸿蒙Next:api6,js语言,系统自带的http库发送请求,返回的header不是标准json格式

发布于 1周前 作者 songsunli 来自 鸿蒙OS

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) =&gt; {
        <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--&gt; "</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--&gt;:'</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--&gt;:'</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--&gt;:'</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--&gt;:'</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--&gt;:'</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--&gt;:'</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 联系官网客服。
8 回复

找HarmonyOS工作还需要会Flutter技术的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

楼主解决了吗?这个问题太坑了,不同的设备上表现不一致,这可如何兼容处理

HarmonyOS的分布式技术让我实现了跨设备的无缝协作,工作效率翻倍。

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

楼主解决了 吗?我也遇到同样的问题

抱歉,暂时无法回复!
在华为 mate pad pro 2019 10.8 英寸,鸿蒙 OS 4.0.0 上正常
p30 pro上同样复现
回到顶部