VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 558|回复: 9

[求助] VC的HTTP读取XML全是乱码

[复制链接]
09_avatar_middle
在线会员 q897037068 发表于 2018-4-13 13:10:50 | 显示全部楼层 |阅读模式
3驿站币
请求老大帮助!弄好了  回头加VIP,没吹牛_有需要加入会员。求帮忙解决问题

HTTP(GET)方式获取 http://dns.weixin.qq.com/cgi-bin/micromsg-bin/newgetdns 回来的是乱码!但是网页访问就很正常。求老大看一下!在线等。急!!!!


  1. hr = pHttpReq->Open(_T("GET"), _T("http://dns.weixin.qq.com/cgi-bin/micromsg-bin/newgetdns"));
  2.         if (FAILED(hr)){
  3.                 pHttpReq->Release();
  4. //                CoUninitialize();
  5.                 return;
  6.         }
  7.         pHttpReq->SetRequestHeader(_T("Content-Type"), _T("application/octet-stream"));
  8.         pHttpReq->SetRequestHeader(_T("Connection"), _T("close"));
  9.         pHttpReq->SetRequestHeader(_T("Accept"), _T("*/*"));
  10.         pHttpReq->SetRequestHeader(_T("Accept-Encoding"), _T("gzip, deflate, zlib"));
  11.         pHttpReq->SetRequestHeader(_T("User-Agent"), _T("MicroMessenger Client"));

  12.         hr = pHttpReq->Send();
  13.         if (FAILED(hr)){
  14.                 pHttpReq->Release();
  15.         //        CoUninitialize();
  16.                 return;
  17.         }

  18.         _variant_t varRspBody = pHttpReq->GetResponseText();
  19.         varRspBody.ChangeType(VT_BSTR,NULL);

  20.         wchar_t* buf = (wchar_t*)(_bstr_t)varRspBody;
复制代码

最佳答案

查看完整内容

虽然客户端获取页面的时候没有指定压缩选项,但是服务器返回的内容还是经过压缩了,使用的是 deflate 的压缩方式,所以既然服务器压缩了,我们就要解压缩,使用 gzip 库中 gzdecompress 函数可以实现解压缩,看到 xml 的明文,如下图:




上一篇:C++ 实现HTTP POST请求
下一篇:链表

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2018-4-13 13:10:51 | 显示全部楼层
q897037068 发表于 2018-4-13 14:30
然而并不没有用!

虽然客户端获取页面的时候没有指定压缩选项,但是服务器返回的内容还是经过压缩了,使用的是 deflate 的压缩方式,所以既然服务器压缩了,我们就要解压缩,使用 gzip 库中 gzdecompress 函数可以实现解压缩,看到 xml 的明文,如下图:
VC的HTTP读取XML全是乱码

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-4-13 13:36:28 | 显示全部楼层
把 这句话去掉就可以了,因为你用了这句,所以服务器给你返回的网页内容是经过 gzip 压缩过的,去掉这句就可以了。如果非要加上压缩也可以,那么就要求你对返回的内容进行解压缩!

pHttpReq->SetRequestHeader(_T("Accept-Encoding"), _T("gzip, deflate, zlib"));

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

09_avatar_middle
ico_lz  楼主| q897037068 发表于 2018-4-13 13:38:20 | 显示全部楼层
Syc 发表于 2018-4-13 13:36
把 这句话去掉就可以了,因为你用了这句,所以服务器给你返回的网页内容是经过 gzip 压缩过的,去掉这句就 ...

VC的HTTP读取XML全是乱码


去掉之后仍是乱码!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-4-13 13:56:55 | 显示全部楼层
q897037068 发表于 2018-4-13 13:38
去掉之后仍是乱码!

pHttpReq->SetRequestHeader(_T("Content-Type"), _T("application/octet-stream"));
这句也去掉试试

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

09_avatar_middle
ico_lz  楼主| q897037068 发表于 2018-4-13 13:59:53 | 显示全部楼层
Syc 发表于 2018-4-13 13:56
pHttpReq->SetRequestHeader(_T("Content-Type"), _T("application/octet-stream"));
这句也去掉试试

乱码! 不是这些的原因!我不加任何头信息!直接GET 返回回来!一样的乱码。网页上看 是XML UTF-8的编码!我本地是ASICC的编码!按道理读取到内存可能是乱码!但是最起码有迹可惜。这个直接就是乱的,很是懊恼!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-4-13 14:02:20 | 显示全部楼层
q897037068 发表于 2018-4-13 13:59
乱码! 不是这些的原因!我不加任何头信息!直接GET 返回回来!一样的乱码。网页上看 是XML UTF-8的编码 ...

那就是网页返回的是 UTF8格式的编码,你得手动把返回的网页内容再转成 GBK 编码才能看到明文!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

09_avatar_middle
ico_lz  楼主| q897037068 发表于 2018-4-13 14:30:09 | 显示全部楼层
Syc 发表于 2018-4-13 14:02
那就是网页返回的是 UTF8格式的编码,你得手动把返回的网页内容再转成 GBK 编码才能看到明文!

然而并不没有用!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-4-13 15:04:55 | 显示全部楼层
q897037068 发表于 2018-4-13 14:30
然而并不没有用!


刚刚抓包看了下,服务器端返回的Http协议头是:
HTTP/1.1 200 OK
Cache-Control: no-cache
Connection: close
Content-Type: text/xml
Content-Encoding: deflate
Content-Length: 1309

所以,使用了 Content-Encoding: deflate 压缩方案,所以网页的内容才是乱码。
按照这种压缩方式找个解压缩的算法就可以解密了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

09_avatar_middle
ico_lz  楼主| q897037068 发表于 2018-4-13 20:27:36 | 显示全部楼层
Syc 发表于 2018-4-13 15:24
虽然客户端获取页面的时候没有指定压缩选项,但是服务器返回的内容还是经过压缩了,使用的是 deflate 的 ...

VC的HTTP读取XML全是乱码 gzdecompress 该函数好像是自己写的!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-12-15 04:50

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表