标签: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