cgicc使用

简介: cgicc使用

CgiCc 使用

一、下载

下载地址:

http://ftp.gnu.org/gnu/cgicc/  
ftp://ftp.gnu.org/gnu/cgicc/ 

二、配置、编译、安装

  • 下载完成后解压:shell tar xzf cgicc-X.X.X.tar.gz
  • 进入解压的目录: `shell cd cgicc-X.X.X/
  • 配置
./configure --prefix=/opt

--prefix 参数指定安装目录,默认安装目录为/usr

  • 编译
make
  • 安装
make install

三、例程

3.1 如果在64bit平台编译32位库:

CXXFLAGS="-m32" CFLAGS="-m32" LDFLAGS="-m32"

3.2 如果安装目录为/opt:

  • 编译时指定包含路径:shell -I/opt/include
  • 编译时指定引用路径:shell -L/opt/lib

3.3 HTML Demo

testcgi.html

<html>
<head><title>Test CGIcc form</title></head>
<body bgcolor="#cccccc" text="#000000">
<h2>Test CGIcc form</h2>
<p>
<form method="post" action="/cgi-bin/testcgi.cgi">
Value 1 :
<input type="text" name="value1">
<p>
Value 2 :
<select name="value2">
   <option value="option1">Option 1
   <option value="option2">Option 2
   <option value="option3">Option 3
</select>
<P>
Value 3 :
<input type="radio" name="value3" value="button1" checked="checked">Button1
<input type="radio" name="value3" value="button2">Button2

<input type="hidden" name="value4" value="data4">
<p>
<input type="submit" value="Submit">
</form>
</body>
</html>

3.4 C++ CGI Demo

testcgi.cpp

#include <iostream>
#include <vector>
#include <string>

#include "cgicc/CgiDefs.h"
#include "cgicc/Cgicc.h"
#include "cgicc/HTTPHTMLHeader.h"
#include "cgicc/HTMLClasses.h"

#include <stdio.h>
#include <stdlib.h>

using namespace std;
using namespace cgicc; // Or reference as cgicc::Cgicc formData; below in object instantiation.

int main(int argc, char **argv)
{
    try {
       Cgicc formData;

       // Send HTTP header: Content-type: text/html
       cout << HTTPHTMLHeader() << endl;

       // Print: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
       cout << HTMLDoctype(HTMLDoctype::eStrict) << endl;

       // Print: <html lang="en" dir="LTR">
       cout << html().set("lang", "EN").set("dir", "LTR") << endl;

       // Set up the HTML document
       cout << html() << head() << title("Cgicc example") << head() << endl;
       cout << body().set("bgcolor","#cccccc").set("text","#000000").set("link","#0000ff").set("vlink","#000080") << endl;

       cout << h1("This is a demonstration of the GNU CgiCC library") << endl;

       form_iterator fvalue1 = formData.getElement("value1");
       if( !fvalue1->isEmpty() && fvalue1 != (*formData).end()) {
          cout << "Value1: " << **fvalue1 << endl;
       }
       else
          cout << "No text entered for value1" << endl;

       cout << p();

       form_iterator fvalue2 = formData.getElement("value2");
       if( !fvalue2->isEmpty() && fvalue2 != (*formData).end()) {
          // Note this is just a different way to access the string class.
          // See the YoLinux GNU string class tutorial.
          cout << "Value2: " << (**fvalue2).c_str() << endl;
       }

       cout << p();

       form_iterator fvalue3 = formData.getElement("value3");
       if( !fvalue3->isEmpty() && fvalue3 != (*formData).end()) {
          cout << "Value3: " << **fvalue3 << endl;
       }

       cout << p();

       form_iterator fvalue4 = formData.getElement("value4");
       if( !fvalue4->isEmpty() && fvalue4 != (*formData).end()) {
          cout << "Value4: " << **fvalue4 << endl;
       }

       // Close the HTML document
       cout << body() << html();
    }
    catch(exception& e) {
       // handle any errors here.
       cout << "ERROR!!" << endl;
    }
    return 0; // To avoid Apache errors.
}
      

3.5 编译c++ CGI demo

  • 使用静态库编译

如果安装在/opt/: g++ -o testcgi.cgi -I/opt/include testcgi.cpp /opt/lib/libcgicc.a
如果安装在/usr/: g++ -o testcgi.cgi testcgi.cpp /usr/lib/libcgicc.a

  • 使用动态库编译

如果安装在/opt/: g++ -o testcgi.cgi -I/opt/include testcgi.cpp -L/opt/lib -lcgicc
如果安装在/usr/: g++ -o testcgi.cgi testcgi.cpp -lcgicc

3.6 运行

  • testcgi.html 拷贝到 /var/www/html/
  • testcgi.cgi 拷贝到 /var/www/cgi-bin/
  • 本机测试 : http://127.0.0.1/testcgi.html
目录
相关文章
|
8月前
Qt提升控件类为自定义类
Qt提升控件类为自定义类
279 0
|
JSON API 数据格式
5分钟构建API接口服务 | python小知识
Flask是python中轻量的web框架,Flask的两个核心模块除了模板渲染之外就是请求响应处理,其中请求响应处理是由 Werkzeug(WSGI 工具库)完成,而模板渲染是由Jinja(模板渲染库)完成。 Flask因为轻量灵活,用来构建API接口十分合适
10357 10
5分钟构建API接口服务 | python小知识
|
关系型数据库 C++ 容器
Qt开发技术:QCharts(一)QCharts基本介绍以及图表框架详解
Qt开发技术:QCharts(一)QCharts基本介绍以及图表框架详解
Qt开发技术:QCharts(一)QCharts基本介绍以及图表框架详解
|
8月前
|
JavaScript 前端开发 API
vue3没有this怎么办?
vue3没有this怎么办?
308 1
|
5月前
|
存储
从源码角度分析Qt元对象系统1
从源码角度分析Qt元对象系统
99 0
|
8月前
|
运维 监控 Unix
htop命令详解
`htop`是Unix-like系统的一款增强版进程查看器,基于ncurses,提供实时系统监控、交互式导航、彩色界面和多核支持。用户可通过键盘或鼠标操作,如排序、搜索、过滤进程,直接发送信号(如`F9`杀进程)等。常用快捷键包括`P`(按CPU排序)、`F3`(搜索进程)、`F2`(设置)和`F10`(退出)。它是`top`的现代替代品,提升资源管理和故障排查效率。
366 2
|
8月前
|
Android开发
jack-server导致 Android 编译 出现异常
jack-server导致 Android 编译 出现异常
221 6
|
8月前
|
Ubuntu
ubuntu更换国内镜像源,下载增速
ubuntu更换国内镜像源,下载增速
|
8月前
|
机器学习/深度学习 人工智能 Rust
马斯克开源Grok-1
每一次技术的突破都预示着未来无限的可能性。近日,马斯克旗下的xAI公司宣布了一个令全球技术爱好者振奋的消息——他们正式开源了拥有3140亿参数的混合专家模型Grok-1。这一举措不仅为开源社区带来了福音,更是在AI发展史上留下了浓墨重彩的一笔。
226 1
|
8月前
|
NoSQL 算法 Redis
redis7.0源码阅读(五):跳表(skiplist)
redis7.0源码阅读(五):跳表(skiplist)
423 1