如何用C、C++解析HTTP请求报文,包括协议头,字符编码,请高手赐教。谢谢。

baisoo 2009-10-16 12:32:50
如何用C、C++解析HTTP请求报文,包括协议头,字符编码,请高手赐教。谢谢。
现在想做一个类似于Web服务器的东东,想根据Http Post的form内容,进行业务处理,这后返回。
但在获取post内容时遇到问题,post的内容是utf-8格式的,用C、C++如何还原为前台组织的内容。包括中文处理。
请高人指点。谢谢。
...全文
1792 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
baisoo 2009-10-17
  • 打赏
  • 举报
回复
随然算法不是最优的,但给了我一个思路。
一个更好一点实现算法
#include <stdio.h>
#include <string.h>
/*
* decode encd with URL, the result saved to decd.
* return point to be decoded string.
* auth: baisoo email:baisoo@msn.com
*/
char *decode( char *encd, char decd[] );

int main( int argc, char *argv[] )
{
if( argc < 2 )
return -1;

char decoded[80];

decode( argv[1], decoded );
printf( "%s\n", decoded );

return 0;
}

char *decode( char *encd, char decd[] )
{
if( encd == NULL )
return (char* )0;

int i, j=0;
char *cd = encd;
char p[2];
unsigned int num;

for( i = 0; i < strlen( cd ); i++ )
{
memset( p, '\0', 2 );
if( cd[i] != '%' )
{
decd[j++] = cd[i];
continue;
}
p[0] = cd[++i];
p[1] = cd[++i];

sscanf( p, "%x", &num );
sprintf(p, "%c", num );
decd[j++] = p[0];
}
decd[j] = '\0';

return decd;
}
teng0210 2009-10-16
  • 打赏
  • 举报
回复
浏览器可以帮助你编码
接受的报文数据就是已经编码过的了.
首先看看HTTP协议的RFC文档

下面是我的Blog中的笔记,你可以看看.
中文处理很简单
http://hi.baidu.com/teng0210/blog/item/ecbfad1160d14d09213f2ecc.html

这个是我用select模型写的简单的http服务框架,你可以看看
http://hi.baidu.com/teng0210/blog/item/6d9c8f500a8f46868c5430a7.html

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧