用 Boost::Beast 刻的 Http Client


這篇算是簡單紀錄一下,Heresy 自己用 Boost::Beast(官網)刻出來的簡易的 C++ Http client 端函式庫。

Heresy 自己會寫這個,主要是因為有寫一個小程式,去把特定網站的內容,自動下來後重新整理、再轉換成電子書的格式給 Kindle 用。

其實第一個版本,Heresy 是用 Boost::asio(官網)來寫的;但是後來那個網站改成 HTTPS 了,所以程式就不能用了…拖了好一陣子後,Heresy 終於下定決心,改用 Boost::Beast 這個稍微高階一點的函式庫,來重寫 Http 的部分了。 ^^"

相關的檔案都放在:

https://github.com/KHeresy/HttpClientLite

他主要的功能,其實就是 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 刻的 Http Client」的想法

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.