标签:int 完全 zh-cn c++ view 就是 还需 历史 nec
在这里不知羞耻的贴一下我最近花时间做出来的小玩具。。。
玩具地址:C-libhttp
关于该玩具:最开始在linux上先后用gcc 4.8.5、gcc 8.1.0做了一点网络部分的基础雏形,后来换到Windows10上用VS2017自带的编译器以及gcc 5.8.0(似乎是这个版本)、gcc 6.3.0,所以不敢保证linux上也能用,Windows10上我自己测试是还不错的,虽然许多网站返回的内容根本就是乱码。。。以及还有其他的C++编译器也不敢保证能通过编译。。。
主要作用:从本地客户端通过服务端发送请求获取互联网资源,对,就是类似python的`requests`库,然而比起强大的`requests`,我的只是渣渣玩具233。。。嘛,虽然很渣,但可能也有好玩的地方,比如,为了方便使用,我还在库中内置了一个简易的json解析器/生成器,它的使用也不需要额外依赖库(不需要STL)。但可能存在有许多bug,和不安全的地方,然而我自己水平太低,只能通过不断学新的知识然后慢慢完善它了。。。做了这个项目之后也发现了自己许多知识漏洞,感叹自己还是啥也不会 > <; 比如,对编码知识有点迷茫,对浏览器渲染系统也所知甚少,哎。。。
目前这个项目呢,完全没考虑utf8、utf16、utf32、GBK等等编码问题,json解析器也只提供了几个基本数据类型,虽然解析效果似乎还不错,但我的加权算法(字符串hash)考虑还需再改进(好简陋)。接下来呢,想先把迭代器加上,还想再内置一个简易正则表达式引擎进去(反正就是玩玩),然后还有完善各种细节。
做这个项目过程用B站、百度等做了许多测试,感谢他们不知情(雾)的合作233~,也参考过RapidJson库?它很强大,本来想学习其设计模式,但怎奈看不是太懂。。。只看懂了极少部分源码,不过也让我学到了一些有用的知识(嗯?比如:json文本格式的历史和参考标准),至少它里面的代码看着很优美的(捂脸,对,我是代码颜控,代码就是要有艺术感才看得下去。。。嘛,不过我自己的代码风格却很丑(哭
对了,json解析/生成器也有它自己的名字:JsonJourney 欢迎各位对它提出疑问和宝贵的意见~
一个示例(更多用例见github):
#include "stdafx.h"
#include <iostream>
#include <sstream>
#include "libhttp.h"
using namespace http;
using namespace JsonJourney;
int main(int argc, char **argv)
{
request r;
Journey headers;
headers["Host"] = "api.vc.bilibili.com";
headers["Connection"] = "keep-alive";
headers["Accept"] = "application/json, text/plain, */*";
headers["Origin"] = "https://www.bilibili.com";
headers["Referer"] = "https://www.bilibili.com/video/av33492716/?spm_id_from=333.334.chief_recommend.19";
headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; WOW64)";
headers["Accept-Encoding"] = "gzip, deflate";
headers["Accept-Language"] = "zh-CN,zh;q=0.9";
headers["Cookie"] = "xxx";
r.get("https://api.vc.bilibili.com/web_im/v1/web_im/unread_msgs", "", headers.ToHttpRequestHeader());
r.view_json_context().Output(); // 内置有json格式检测,如果合法就可以进行解析
return 0;
}
output:
{
"code": 0,
"msg": "ok",
"message": "ok",
"data": {
"ack_seqno": 1203,
"latest_seqno": 1203,
"unread_count": 0,
"_gt_": 0
}
}
标签:int 完全 zh-cn c++ view 就是 还需 历史 nec
原文地址:https://www.cnblogs.com/darkchii/p/9781109.html