加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular2 Http请求如何将body作为二进制返回?

发布时间:2020-12-17 07:35:26 所属栏目:安全 来源:网络整理
导读:我有一个url,用charset = iso-8859-7返回html内容,这意味着angulars http请求默认将数据转换为utf8,我无法正确地将它们编码回iso-8859-7.经过大量的搜索,我发现很多人都有同样的问题,大多数答案是改变服务器中的字符集,我无法做的事情,因为服务器不属于我.
我有一个url,用charset = iso-8859-7返回html内容,这意味着angulars http请求默认将数据转换为utf8,我无法正确地将它们编码回iso-8859-7.经过大量的搜索,我发现很多人都有同样的问题,大多数答案是改变服务器中的字符集,我无法做的事情,因为服务器不属于我.

所以问题是HTTP请求如何返回二进制文件,以便我可以将它们编码为iso-8859-7字符串?

编辑 – 解决方案:
我最后做的是在RequestOptions上使用TextDecoder和{responseType:ResponseContentType.ArrayBuffer}.这是一个示例,可以帮助任何试图解析html页面并将其解码为正确编码的人.希望能帮助所有在使用像Ionic2这样的Angular2的项目中尝试过这个的人.

public parser() {
    // Set content type
    let headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded;'});
    // Create a request option,with withCredentials for sending previous stored cookies
    let options = new RequestOptions({
      withCredentials: true,headers: headers,responseType: ResponseContentType.ArrayBuffer
    });

    return this.http.get('https://blablablablabla',options) // ...using get request
      .map((res: any) => {

        var string = new TextDecoder('iso-8859-7').decode(res._body);

        var parser = new DOMParser();
        var htmlDoc = parser.parseFromString(string,"text/html");

        console.log(string)

        ..... blabla blabla doing some stuff here .....
      })
      .catch((error: any) => Observable.throw(error || 'Server error'));
}
发送请求时包括RequestOptionsArgs.

在RequestOptionsArgs中指定字段responseType : ResponseContentType. (ResponseContentType.ArrayBuffer或ResponseContentType.Blob)

使用TextDecoder或类似的东西来解码结果.

查看文档:

https://angular.io/api/http/Http

https://angular.io/api/http/RequestOptions

https://angular.io/api/http/ResponseContentType

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读