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

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



正常情况下,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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以帮助您。您可以通过在VScode中创建一个C文件来编写代码并读取文本数据。然后,您可以使用所读取的数据来创建一个二维图形。这涉及到C语言中的图形库,例如OpenGL或SDL。我可以提供一些基本的代码示例来帮助您入门。 ### 回答2: 要通过VScode编写C语言程序来获取文本数据并画一个二维图形,可以按照以下步骤进行: 1. 首先,打开VScode,并确保已经安装了C语言的相关插件和编译器。 2. 创建一个新的C语言源文件,例如"main.c"。 3. 在源文件中,编写代码以读取文本数据。可以使用标准库函数如fopen()和fread()来打开和读取文件,或使用scanf()函数从标准输入读取数据。 4. 根据文本数据的格式和结构,解析数据并将其存储到适当的变量中。例如,如果文本数据是以一行一对坐标的形式给出,可以使用数组或链表存储这些坐标。 5. 使用图形库,如OpenGL或SDL,调用相关的函数以在图形窗口中绘制二维图形。例如,可以使用OpenGL的glBegin()和glVertex2f()函数来定义图形的形状和位置。 6. 遍历存储数据的变量,在图形窗口中逐个绘制点、线、多边形等。可以使用循环结构来访问每个数据点。 7. 最后,编译并运行程序。在VScode中使用编译器命令编译C文件,并确保没有错误和警告。运行程序后,应该能够在图形窗口中看到绘制的二维图形。 需要注意的是,具体的代码实现和绘图库的选择可能因个人情况而异。但以上步骤提供了一个基本的框架,可以根据具体需求进行调整和扩展。 ### 回答3: 在VScode中编写C程序可以使用C标准库的函数和数据结构来获取文本数据,并以此数据为基础画出二维图形。 首先,在C程序中使用文件操作函数打开文本文件,使用文件读取函数将数据读入程序中。读取的数据可以是保存在文本文件中的数值,每个数值代表一个点或者一条线的坐标。 接下来,通过引入图形库,如OpenGL、SDL等,使用相关函数将读取到的数据绘制成二维图形。例如,在OpenGL中,可以使用glBegin()和glVertex2f()等函数设置绘图的起点和顶点坐标,再利用glEnd()函数结束绘图过程。可以使用循环语句来遍历读取到的所有数据,逐个绘制出相应的图形元素,以达到画出二维图形的效果。 在绘制图形之前,可以使用相关函数设置窗口大小、坐标系等参数,以保证绘制的图形可以正常显示。 最后,通过编译和运行C程序,即可在VScode的输出窗口中显示绘制好的二维图形。如果需要对图形进行交互操作,还可以加入相应的事件监听和处理函数,实现用户对图形的动态操作和控制。 总之,通过VScode 编写C程序并使用相关库函数,可以获取文本数据并绘制出二维图形,这是一种常见的数据可视化方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值