這篇算是簡單紀錄一下,Heresy 自己用 Boost::Beast(官網)刻出來的簡易的 C++ Http client 端函式庫。
Heresy 自己會寫這個,主要是因為有寫一個小程式,去把特定網站的內容,自動下來後重新整理、再轉換成電子書的格式給 Kindle 用。
其實第一個版本,Heresy 是用 Boost::asio(官網)來寫的;但是後來那個網站改成 HTTPS 了,所以程式就不能用了…拖了好一陣子後,Heresy 終於下定決心,改用 Boost::Beast 這個稍微高階一點的函式庫,來重寫 Http 的部分了。 ^^"
相關的檔案都放在:
他主要的功能,其實就是 Client::ReadHtml() 和 Client::GetBinaryFile() 這兩個函式;比較特別的,也只有他們有去處理重新導向的部分(Http 300 系列的回覆)了。
再來,Session::GetBody() 的部分,則是會去針對原始編碼做轉換,把網頁的內容轉換成 utf,方便後續處理(例如用 OpenCC 做簡轉繁)。
最後,就是還有寫一個簡易版的 HTMLParser,來分析網頁的標籤了~但是實際上,HTML 標籤…恩,由於彈性很大,所以超難處理的!這邊也只是弄到堪用而已…bug 應該也不少。
(之前也有試著寫一個 Boost.PropertyTree 風格的 HTMLParser,但是老實說連自己都忘了進度怎樣了?)
但是老實講,這東西基本上算是 Heresy 在一邊測試 Boost::Beast、一邊根據自己的需求寫的;再加上 Heresy 對他的底層、Boost::ASIO 其實也不熟,所以也只能算是一個勉強堪用的東西而已。
而認真講,很多東西(尤其是錯誤處理),基本上也都沒有寫完,會不會有完成的一天,其實也沒個譜。所以…恩,看看就好。
對 Heresy 自己來說,這邊主要也只是一個紀錄而已。因為實際上,如果真的要用,還有很多現成的函式庫可以用;有興趣的話可以參考《Other HTTP/FTP client Libraries for C/C++》這邊的整理。
[…] 之前也有用過 Boost Beast 寫過一個簡單哦 https client(更早是直接用 Boost ASIO 刻),後來也有用 Qt […]
讚讚
[…] 由於 Heresy 在寫這個程式的時候,是想盡量不要多用額外的函式庫,所以網路的部分,也是直接使用 Qt 的 network 模組。(否則之前也曾經用 Boost.Beast 寫過簡單的 http client) […]
讚讚
[…] WebSocket++ 來開發自己的 WebSocket Server;而後來其實也有改用 Boost.Beast 來做同樣的工作。而這兩套函式庫的底層,其實都是 […]
讚讚