C++libhttp

  在这里不知羞耻的贴一下我最近花时间做出来的小玩具。。。

  玩具地址: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~,也参考过RapidJosn库⬅它很强大,本来想学习其设计模式,但怎奈看不是太懂。。。只看懂了极少部分源码,不过也让我学到了一些有用的知识(嗯?比如: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
        }
}

  

猜你喜欢

转载自www.cnblogs.com/darkchii/p/9781109.html
C