avhttpC++語言的HTTP開發(fā)包
avhttp是一個基于Boost.Asio實(shí)現(xiàn)的HTTP客戶端開發(fā)工具庫.
簡介
它支持HTTP(1.0/1.1)、HTTPS, 斷點(diǎn)續(xù)傳, 多線程并發(fā)下載, 異步, HTTP/SOCKS4/SOCKS5代理支持等特性, 開發(fā)者可以輕松的基于這個庫開發(fā)其他相關(guān)應(yīng)用.
快速上手
#include <iostream>
#include <boost/array.hpp>
#include "avhttp.hpp"
int main()
{
boost::asio::io_service io;
avhttp::http_stream h(io);
boost::system::error_code ec;
// 打開url.
h.open("http://www.boost.org/LICENSE_1_0.txt", ec);
if (ec) { // 打開失敗處理...
std::cout << "Error: " << ec.message() << std::endl;
return -1;
}
boost::array<char, 1024> buf;
// 循環(huán)讀取數(shù)據(jù).
while (!ec) {
std::size_t bytes_transferred = h.read_some(boost::asio::buffer(buf), ec);
// 將下載的數(shù)據(jù)打印到屏幕.
std::cout.write(buf.data(), bytes_transferred);
}
std::cout.flush();
h.close(ec); // 關(guān)閉.
io.run();
return 0;
}
OK, 上面已經(jīng)展示了一個簡單卻功能完善的示例用于HTTP下載, 但事實(shí)上有時您需要定制自己的HTTP請求, 請繼續(xù)往下看, 下面介紹HTTP參數(shù)相關(guān)的設(shè)置.
使用request_opts定制HTTP請求
boost::asio::io_service io;
avhttp::http_stream h(io);
avhttp::request_opts opt;
// 可以insert多個選項(xiàng).
opt.insert("Connection", "Keep-Alive");
// 在這里設(shè)置到request_options.
h.request_options(opt);
// 然后再發(fā)起其它相關(guān)操作.
h.open("http://www.boost.org/LICENSE_1_0.txt");
// ...
avhttp::request_opts 在發(fā)起HTTP請求之前的設(shè)定HTTP選項(xiàng), 它可以實(shí)現(xiàn)讓您定制自己的http header.
使用avhttp::proxy_settings設(shè)置代理
boost::asio::io_service io;
avhttp::http_stream h(io);
avhttp::proxy_settings p;
// 這里可以設(shè)置3種代理, socks4/socks5/http, 具體可以查看avhttp::proxy_settings的聲明.
p.type = avhttp::proxy_settings::http;
p.hostname = "127.0.0.1";
p.port = 8080;
h.proxy(p); // 設(shè)置代理.
// 然后再發(fā)起其它相關(guān)操作.
h.open("http://www.boost.org/LICENSE_1_0.txt");
// ...
常用問題
- 如果需要支持https, 它依賴openssl, 請自行編譯openssl或到 http://sourceforge.net/projects/avplayer/files/develop/OpenSSL-dev/ 下載已經(jīng)編譯好的ssl開發(fā)包, 并在項(xiàng)目中設(shè)置, 啟用AVHTTP_ENABLE_OPENSSL.
- 如果需要支持gzip, 它依賴zlib, 需要在項(xiàng)目中啟用AVHTTP_ENABLE_ZLIB, 當(dāng)然您還需要使用avhttp::request_opts指定相應(yīng)Accept-Encoding.
- 如果您還有其它任何問題, 請加QQ群:3597082或IRC #avplayer @ irc.freenode.net, 或直接mailto: [email protected].
評論
圖片
表情
