精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
httplib是完善易用的HTTP库,只用一个头文件就支持了HTTP协议,还包含有SSL的支持,锐英源软件用OPENSSL开发过产品,深知SSL的处理有很多细节,个人从0开发支持SSL的HTTPS协议是很困难的,所以说httplib有非常大的价值,锐英源软件在研究gsoap时也遇到了SSL的代码,对于SSL的细节掌握有一些。从HTTP到HTTPS,是两个不同的定位,HTTPS难的多,很多朋友说自己编程水平提高太慢,可以学习SSL和HTTPS的开发,学成了水平也就上去了。
httplib里封装了HTTP/HTTPS服务器和客户端代码,httplib也跟随协议标准的提升来更新代码,里面也大量应用了C++新标准代码,所以httplib要点学习值得推荐给大家,比如下面客户端的代码:。
httplib::Headers h = { {"Content-Type", "text/html"}, }; httplib::Client a("http://cpp-httplib-server.yhirose.repl.co"); a.set_default_headers(h); a.set_proxy(sip, m_iProxyPort); if (m_sBridgeUser.GetLength() > 0) { string suser = WString2String(m_sBridgeUser.GetBuffer()); string spass = WString2String(m_sBridgePass.GetBuffer()); a.set_proxy_basic_auth(suser, spass); } a.Get("/hi", [&](const char* data, size_t data_length) { wstring sget = StringToWstring( string(data, data_length)); AfxMessageBox(sget.c_str()); return true; });
Headers是multimap类型,用insert添加是编译通过不了,但是用定义语句={}进行初始化就非常简单。
[&]是std::function类型的体现,a.Get行从逗号后到)前,类似于匿名函数,{}里是函数代码,在Get请求结束时,调用这个匿名函数代码,函数参数data和data_length包含了http客户端请求的结果。
最近锐英源软件开发代理ip服务器功能,所以用到了代理,里面的set_proxy和set_proxy_basic_auth就是代理方面的函数。
httplib功能和机器环境没有关系,不像某些HTTP库,会使用InternetOpen这样的函数,受操作系统的环境影响,不好控制。
httplib的客户端还能给出一个SOCKET进行控制,不像InternetOpen这类库,封装的严格不好定制开发。
但是httplib客户端代码没封装CONNECT请求,这是一个小漏洞,希望以后改进。
本网页会逐渐增加一些httplib里C++代码的剖析,请大家收藏常来。