分享一个嵌入式httpd服务器开发库 - boahttpd library

Boahttpd Library 是一个C接口的开发库,支持CGI、多线程和跨平台,适用于嵌入式设备的web管理。本文介绍了如何在Windows、Linux等平台上使用该库,包括创建简单的HTTP服务器、添加CGI支持和处理FORM请求。此外,还展示了如何实现过滤器和认证机制。
摘要由CSDN通过智能技术生成

http://sourceforge.net/projects/boahttpd/

    一个C接口的开发库,适用于 windows/linux/或其他嵌入式平台,支持CGI扩展,支持多线程。采用面向对象开发,一个应用里可以同时开多个http server,只要端口不同就互不影响。主要应用场景应该是嵌入式应用(所谓boa-server的概念),在需要做一个基本web的设备管理使用。在例子中就是展示,从页面信息的提交、到处理、到结果的返回,里面结合jquery/bootstrap网页技术,可以作出一个精致的设备管理控制页面。 

- Web file downloading 网页文件浏览
- CGI support , CGI支持
- Multi-thread, Multi-instance  多线程、多实例
- Cross-Platform (Windows, Linux, other Embedded Linux) 跨平台支持
- Filter & Authentication support  过滤器 / 鉴权密码认证
- Cookie support  , Cookie支持

     这个开发库体积较小,已经编译好了windows, linux(fedora14,x86)版本的库。使用起来就是一个头文件、一个库文件。比如说下面几句话就完成了一个简单的http服务器:

#include "../boahttpd.h"
int main()
{
    boa_server_t server;
    if(boa_server_create(&server, NULL,
          "wwwroot", 
           8888, "0.0.0.0") < 0)
    {
       printf("failed to create server!\n");
       return 0;
    } 

    getchar();
    boa_server_destroy(&server);
    return 0;
}

           其实就是一个简单的create操作,传入主目录文件夹的位置,端口号就可以了。在当前目录下创建一个wwwroot, 在wwwroot放一个index.html,运行程序试试吧。在浏览器里输入http://127.0.0.1:8888试着访问一下。
      上面是完成一个普通的http服务器,可以浏览下载网页了。但是若要支持cgi的处理,则需要注册一些回调函数。每个cgi服务有一个唯一的名称,并对应一个回调函数。当然,可以用一个回调函数来处理所有的cgi服务。示范代码如下:

static int cgi_handler(void* context, void* userdata)
{
    … handle the cgi request …
    return 0;
}
int main()
{
    boa_cgi_t cgi ;
    boa_cgi_create(&cgi);
    boa_cgi_register(&cgi, "test", &cgi_handler, NULL);
 
    boa_server_t server;
    if(boa_server_create(&server,&cgi,
            wwwroot", 8888, "0.0.0.0") < 0)
    {
       printf("failed to create server!\n");
       return 0;
    }
     getchar();

    boa_cgi_destroy(&cgi);
    boa_server_destroy(&server);
    return 0;
}

         上面是先定义若干个handler(即callback),然后把这些handler都添加一个boa_cgi_t对象里,然后把这个boa_cgi_t对象交给server即可。在运行的时候,server在接收到cgi请求后,会根据cgi服务的名称、找到相应的handler来处理。
          比如,输入cgi请求: http://127.0.0.1:8888/cgi/test?name=someone
          server收到此cgi请求后,检查到服务名称为test,于是检查boa_cgi_t里有没有注册了名称为"test"的handler,如果有的话就调用之。在handler里,可以获取cgi请求的相关信息,例如参数"name=someone"、以及HTTP头部的其他field字段。如果是个POST请求,可以获得正文。

static int cgi_handler(void* context, void* userdata)
{
    con
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿发你好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值