C++获取网页数据时的505错误

文章详细介绍了如何解决PHP自动gzip压缩导致的API调用返回乱码的问题,通过关闭gzip功能成功解决问题,并提供了相关代码示例。

包头少信息 :添加包头信息



正常情况下,ucenter请求程序应该返回的是”1″, 用浏览器获取到的是正常的。然而通过api调用返回的是一串乱码:转换成16进制为“ 1f8b 0800 0000 0000 0003 3204 0000 00ff  ff03 00b7 efdc 8301 0000 000a”。

网上搜索了一下发现“1f8b 0800 0000 0000”应该是gzip的文件头,所以更加确定了问题出现在gzip上。

在尝试了将nginx关闭gzip后,发现问题依旧。然后发现原来php启用了,自动gzip。于是在php.ini中将 zlib.output_compression = Off 关掉后,问题解决!

//打开HTTP请求句柄
hHttpRequest = ::HttpOpenRequest(hHttpConnect,
_T("GET"),
szUrlPath,
HTTP_VERSION,
NULL,
NULL,
INTERNET_FLAG_NO_UI | INTERNET_FLAG_DONT_CACHE,
1);
if (NULL == hHttpRequest)
{
goto RET;
}

BOOL bRet;
TCHAR headerLanguage[] = _T("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");   
TCHAR headerEncoding[] = _T("Accept-Encoding: deflate, sdch";);   
TCHAR headerCharset[] = _T("Accept-Language: zh-CN,zh;q=0.8");   
TCHAR headerContentType[] = _T("User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36";);  
bRet = HttpAddRequestHeaders(hHttpRequest, headerLanguage,    -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);   
bRet = HttpAddRequestHeaders(hHttpRequest, headerEncoding,    -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);   
bRet = HttpAddRequestHeaders(hHttpRequest, headerCharset,    -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);   
bRet = HttpAddRequestHeaders(hHttpRequest, headerContentType, -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);  

if (!::HttpSendRequestW(hHttpRequest, NULL, 0, NULL, NULL))     //向服务器发送这个请求
{
goto RET;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值