欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

gsoap使用

程序员文章站 2022-07-14 17:06:06
...

之前使用gsoap开发了一个webservice,提供restful接口和函数调用功能。现在整理下,记录下。

1、copy gsoap文件到新建目录

soapcpp2.exe  stdsoap2.cpp  stdsoap2.h

2、new add.h

//gsoap ns service name: add
//gsoap ns service style: rpc 
int ns__add(int num1, int num2, int* result );

3、cd 到add.h目录下 使用
soapcpp2.exe -S add.h
-S 是只生产服务端代码

4、copy 生成的文件到工程目录下,将下面文件添加到工程

soapH.h soapStub.h stdsoap2.h 
soapC.cpp soapServer.cpp stdsoap2.cpp add.nsmap

5、使用的时候添加头文件

#include "soapH.h"
#include "add.nsmap"

6、响应
plugin目录下一下文件copy到工程目录下即可,如果放到单独目录plugin makefile中添加VPATH =./plugin

httpget.h
httppost.h
httpform.h
httpget.c
httppost.c
httpform.c

代码中添加处理

int   myhttp_get(struct   soap   *soap);
//curl -X GET IP:port/path   curl IP:port/path   
int   myhttp_put(struct   soap   *soap);
//curl -X PUT IP:port/path
int   myhttp_post(struct   soap   *soap);
//curl -d '{"id":1,"info":"hello"}' IP:port/path

struct soap a_soap;  
soap_init(&a_soap);  //初始化运行时环境  
a_soap.fget=myhttp_get;
a_soap.fput=myhttp_put;
if (soap_register_plugin_arg(&a_soap, http_form, (void*)myhttp_post))
{
    soap_print_fault(&a_soap, stderr);
}

7、post data 获取

char* pdata=getpostpara(a_soap->buf);
char* getpostpara(char* p)
{
    if (!strncmp(p, "POST",strlen("POST")))
    {
        for(;*p;p++)
        {
            if (!strncmp(p, "\r\n\r\n",strlen("\r\n\r\n")))
                break;
        }
        p+=strlen("\r\n\r\n");
    }
    return p;
}

路径获取 a_soap->path

附加三个功能:

8、json解析

文件夹里面保留头文件和源文件。
jsoncpp-master
   include/json/.h头文件
   src/lib_json/.cpp源文件
makefile中添加:
VPATH=./jsoncpp-master/include:./jsoncp-maser/src/lib_json
#include "json/json.h"
json_reader.cpp
json_value.cpp
json_writer.cpp

9、base64

base64加密解密

10、log日志

多线程日志

相关标签: gsoap