当前位置: 首页 > 软件库 > 程序开发 > 网络工具包 >

avhttp

C++语言的HTTP开发包
授权协议 Boost License
开发语言 C/C++
所属分类 程序开发、 网络工具包
软件类型 开源软件
地区 国产
投 递 者 司马建柏
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

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.

 相关资料
  • 概述 ThinkCMF已经默认开启了多语言的支持,后台以语言包形式实现多语言,前台以语言包和多模板的形式实现多语言. 语言包 ThinkCMF开启的语言有三个,分别是zh-cn,en-us,zh-tw,此项配置在application/Common/Conf/config.php配置文件下,可以通过更改LANG_LIST的值增加语言. 语言包分为框架核心语言包(在simplewind/Core/L

  • 范式 声明式 函数式 Common Lisp Clojure Haskell Erlang Scala LISP Logo F# 逻辑式 Prolog 命令式 非结构化 COBOL 结构化 面向对象 Visual Basic Objective-C Smalltalk Python Ruby Eiffel Java C++ C# 过程式 Delphi/Object Pascal Fortran B

  • 几个月前,我决定开发一个可以真正使用的编程语言。语言的目标是这样的: 可以和C一样编译成 native 机器码,并能用于游戏开发。 语言和java/C# 类似,并且尽量减少业务代码开发的复杂度。 兼容全平台、开源。 国产、全中文支持。 有完整的 IDE、文档、工具支持。 有一个社区支持。 这是一个很伟大的事情,如果你有兴趣和时间,欢迎加入我们的开源团队。 不会做没关系,这是一个学习机会。 联系方式

  • 主要内容:使用DartPad在线执行脚本,设置本地环境,IDE支持,dart2js工具本章讨论在Windows平台上为Dart设置执行环境。 使用DartPad在线执行脚本 可以使用 https://dartpad.dartlang.org/ 上的在线编辑器在线运行测试脚本。Dart编辑器执行脚本并显示HTML和控制台输出。在线编辑器附带一组预设代码示例。 Dartpad编辑器的截图如下 - Dartpad还可以以更严格的方式进行编码。通过检查编辑器右下角的强模式选项来实现。强模式

  • LiteIDE LiteIDE是一款开源、跨平台的轻量级Go语言集成开发环境(IDE)。 支持的操作系统 Windows x86 (32-bit or 64-bit) Linux x86 (32-bit or 64-bit) 下载地址 :http://sourceforge.net/projects/liteide/files/ 源码地址 :https://github.com/visualfc/

  • 9.3* Perl 语言接口开发 本节将专门讲一讲 if_perl 接口的开发指导与实践经验,虽然只讲 perl ,但其基本 思路对于其他语言接口也可互为参照。 9.3.1 VimL 调用 perl 接口的基本流程 典型地,假如要使用(perl)语言接口实现某个较为复杂的功能或插件,其调用流程大概 可归纳如下: 定义快捷键映射,nnoremap ,这不一定必要,可能直接使用命令也方便; 快捷键调用

  • 一.关于易语言DLL   从易语言3.6版开始,已经能够支持对DLL动态链接库的开发, 编译出的DLL是标准的DLL,和其他编程语言生成的标准DLL的调用方法相同。易语言编写出的DLL,在非独立编译exe时只需要DLL文件随应用程序一起发行,而独立编译exe时无需将DLL文件随应用程序一起发行。 二.新建易语言DLL程序 新建一个易语言程序,然后选择 图标,易语言就会自动创建 出编写DLL动态链接

  • 为什么开发 Tea 语言 现在语言很多,我来一一解释下为什么我不喜欢这些语言而要自己开发: Python/Ruby/NodeJs: 它们很简单,写起来确实比较“爽”,写写小工具很适合。但我不喜欢它们,理由有二: a. 我需要做功能完整的产品,而不是写小工具。因此脚本语言是不可以的:它无法保护源码。 b. 我希望语言能有强大的 IDE,不要让我背一大堆 API,我只能记住首字母。 Java Java