C++语言的HTTP开发包 avhttp

Boost License
C/C++
跨平台
2013-02-25
红薯

avhttp Build Status

avhttp是一个基于Boost.Asio实现的HTTP客户端开发工具库.

简介

它支持HTTP(1.0/1.1)、HTTPS, 断点续传, 多线程并发下载, 异步, HTTP/SOCKS4/SOCKS5代理支持等特性, 开发者可以轻松的基于这个库开发其他相关应用.

快速上手

#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;

    // 循环读取数据.
    while (!ec) {
        std::size_t bytes_transferred = h.read_some(boost::asio::buffer(buf), ec);
        // 将下载的数据打印到屏幕.
        std::cout.write(buf.data(), bytes_transferred);
    }

    std::cout.flush();
    h.close(ec); // 关闭.
    io.run();

    return 0;
}

OK, 上面已经展示了一个简单却功能完善的示例用于HTTP下载, 但事实上有时您需要定制自己的HTTP请求, 请继续往下看, 下面介绍HTTP参数相关的设置.

使用request_opts定制HTTP请求

boost::asio::io_service io;
avhttp::http_stream h(io);

avhttp::request_opts opt;
// 可以insert多个选项.
opt.insert("Connection", "Keep-Alive");

// 在这里设置到request_options.
h.request_options(opt);

// 然后再发起其它相关操作.
h.open("http://www.boost.org/LICENSE_1_0.txt");
// ...

avhttp::request_opts 在发起HTTP请求之前的设定HTTP选项, 它可以实现让您定制自己的http header.

使用avhttp::proxy_settings设置代理

boost::asio::io_service io;
avhttp::http_stream h(io);

avhttp::proxy_settings p;
// 这里可以设置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); // 设置代理.

// 然后再发起其它相关操作.
h.open("http://www.boost.org/LICENSE_1_0.txt");
// ...
常用问题

  • 如果需要支持https, 它依赖openssl, 请自行编译openssl或到 http://sourceforge.net/projects/avplayer/files/develop/OpenSSL-dev/ 下载已经编译好的ssl开发包, 并在项目中设置, 启用AVHTTP_ENABLE_OPENSSL.
  • 如果需要支持gzip, 它依赖zlib, 需要在项目中启用AVHTTP_ENABLE_ZLIB, 当然您还需要使用avhttp::request_opts指定相应Accept-Encoding.
  • 如果您还有其它任何问题, 请加QQ群:3597082或IRC #avplayer @ irc.freenode.net, 或直接mailto: jack.wgm@gmail.com.

加载中

评论(0)

暂无评论

avhttp v2.9.8 发布,HTTP 客户端开发库

avhttp v2.9.8 版本发布!主要改进包括: 1.增加了cookie管理。 2.基于RFC1867的HTTP文件上传功能(支持异步/同步)。 3.支持独立编译选项。 4.改善了解析HTTP DATE和修正了一些编译错误(vc/...

2013/09/13 08:29

没有更多内容

加载失败,请刷新页面

没有更多内容

1
回答
avhttp编译报错

@Jackarain 你好,想跟你请教个问题: 我从github上下载了avhttp。 开发环境是vs2013,boost库是svn上的86799版。系统...

2014/06/17 16:30
14
回答
avhttp的第一期目标总算完成了, 发个贴感叹一下.

很多很多时候, 我们都需要用到http协议, 而在c/c++中, 好用的开源http开发库大概没几个, 比较全面的就属curl了, 我相信这个库很多人都使...

2013/05/12 00:04

没有更多内容

加载失败,请刷新页面

没有更多内容

avhttp简介

avhttp avhttp是一个基于Boost.Asio实现的HTTP客户端开发工具库. 简介 它支持HTTP(1.0/1.1)、HTTPS, 断点续传, 多线程并发下载, 异步, HTTP/SOCKS4/SOCKS5代理支持等特性, 开发者可以轻松的基...

2013/05/13 15:52
1K
1
一个支持并发, 支持异步/同步, 支持http/https, 支持续传的avhttp

起源 问题起源于 microcai 和 jack 的一次谈话。他们注意到了 HTTP 多线程下载模式,其实本质上不过是向服务器发起了多个TCP连接。使用一个线程一样能完成这样的工作——只要他们使用的是...

2013/02/24 00:00
6K
0
avhttp终于支持了gzip/chunked

Chunked 也叫分块传输编码, 是http 1.1中的内容, 其好处有以下: HTTP分块传输编码允许服务器为动态生成的内容维持HTTP持久链接。通常,持久链接需要服务器在开始发送消息体前发送Content-Len...

2013/05/07 15:19
1K
0
OK, 完成avhttp的socks4/socks5代理支持功能

不错, 完成avhttp的socks4/socks5代理支持功能, 相对来说, 已经算得上完整的http客户端了. 不止如此, 因为到处找不到完善的socks代理服务器程序测试代理功能, 本人再一次发杨黑客精神, 当找不...

2013/03/01 00:23
1K
0
streambuf相关

##streambuf简介 在C++中所有的stream对象内部都有一个stream buffer,不管这个流对象是缓存还是不缓存的。 >All stream objects, no matter whether buffered or unbuffered, have an assoc...

2013/10/13 18:13
141
0

没有更多内容

加载失败,请刷新页面

没有更多内容

返回顶部
顶部