xmlrpc-c适用于初学者,示例代码无效->;应为XMLRPC_类型_数组
我通过以下基本代码在控制台上显示xml格式:xmlrpc-c适用于初学者,示例代码无效->;应为XMLRPC_类型_数组,c,xml-rpc,C,Xml Rpc,我通过以下基本代码在控制台上显示xml格式: #include <stdio.h> #include <stdlib.h> #include <xmlrpc.h> #include <xmlrpc_client.h> #include <xmlrpc-c/base.h> #include <xmlrpc-c/util.h> #define XMLRPC_NAME "XML-RPC tesaja" #define
#include <stdio.h>
#include <stdlib.h>
#include <xmlrpc.h>
#include <xmlrpc_client.h>
#include <xmlrpc-c/base.h>
#include <xmlrpc-c/util.h>
#define XMLRPC_NAME "XML-RPC tesaja"
#define XMLRPC_VERSION "0.1"
int main()
{
//declare
xmlrpc_env env;
xmlrpc_value *result = NULL;
xmlrpc_client_init(XMLRPC_CLIENT_NO_FLAGS, XMLRPC_NAME, XMLRPC_VERSION);
xmlrpc_env_init(&env);
result = xmlrpc_client_call(&env, "http://xmlrpc-c.sourceforge.net/api/sample.php" ,
"sample.sumAndDifference", "(ii)", //method
(xmlrpc_int32) 5, //var
(xmlrpc_int32) 3); //var
/* ma code */
char output[1024] = {0};
int l_output = 0;
/* ------------------ keluarin xml ------------------*/
xmlrpc_value *params;
xmlrpc_mem_block *xmlmemblockP = NULL;
params = xmlrpc_build_value(&env, "(ii)", (xmlrpc_int32) 5, (xmlrpc_int32) 7);
xmlmemblockP = XMLRPC_MEMBLOCK_NEW(char, &env, 0);
xmlrpc_serialize_call(&env, xmlmemblockP, "sample.sumAndDifference", params);
l_output = snprintf(output,XMLRPC_MEMBLOCK_SIZE(char, xmlmemblockP),"%s",XMLRPC_MEMBLOCK_CONTENTS(char, xmlmemblockP));
output[l_output] = '\0';
printf("submit data -> \n %s\n",output);
XMLRPC_MEMBLOCK_FREE(char, xmlmemblockP);
/* Dispose of our parameter array. */
xmlrpc_DECREF(params);
/* ------------------ keluarin xml ------------------*/
if(env.fault_occurred)
{
printf("%s\n",env.fault_string);
return 0;
}
// Parse our result value
xmlrpc_int32 sum, difference;
xmlrpc_decompose_value(&env, result, "{s:i,s:i,*}",
"sum", &sum,
"difference", &difference);
/* keluarin xml respon */
params = result;
xmlmemblockP = XMLRPC_MEMBLOCK_NEW(char, &env, 0);
xmlrpc_serialize_call(&env, xmlmemblockP, "sample.sumAndDifference", params);
l_output = snprintf(output,XMLRPC_MEMBLOCK_SIZE(char, xmlmemblockP),"%s",XMLRPC_MEMBLOCK_CONTENTS(char, xmlmemblockP));
output[l_output] = '\0';
printf("respon data-> \n %s \n",output);
XMLRPC_MEMBLOCK_FREE(char, xmlmemblockP);
/* Dispose of our parameter array. */
//xmlrpc_DECREF(params); //udah diwakilin dibawah
/* keluarin xml respon*/
if(env.fault_occurred)
{
printf("%s\n",env.fault_string);
return 0;
}
// Print out our sum and difference.
printf("Sum: %d, Difference: %d\n", (int) sum, (int) difference);
// Dispose of our result value.
xmlrpc_DECREF(result);
//Shutdown our XML-RPC client library.
xmlrpc_env_clean(&env);
xmlrpc_client_cleanup();
return 0;
}
输出
submit data ->
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>sample.sumAndDifference</methodName>
<params>
<param><value><i4>5</i4></value></param>
<param><value><i4>7</i4></value></param>
</params>
</methodCall>
respon data->
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>sample.sumAndDifference</methodName>
params>
Expected XMLRPC_TYPE_ARRAY
submit data ->
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>sample.sumAndDifference</methodName>
<params>
<param><value><i4>5</i4></value></param>
<param><value><i4>7</i4></value></param>
</params>
</methodCall>
respon data->
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param><value><struct>
<member><name>sum</name>
<value><i4>8</i4></value></member>
<member><name>difference</name>
<value><i4>2</i4></value></member>
</struct></value></param>
</params>
/methodResponse>
Sum: 8, Difference: 2
提交数据->
sample.sumand差异
5.
7.
respon数据->
sample.sumand差异
参数>
应为XMLRPC_类型_数组
问题
意思?如果xmlrpc服务器(任何基于xmlrpc的服务器,如xmlrpc-c、xmlrpc-java等)请求整数
,将
表示它吗thx for everythingaah,在我查找xmlrpc-c库提供的函数之后,我找到了
xmlrpc_serialize_response()代码>,我认为它会做这样的事情
#include <stdio.h>
#include <stdlib.h>
#include <xmlrpc.h>
#include <xmlrpc_client.h>
#include <xmlrpc-c/base.h>
#include <xmlrpc-c/util.h>
#define XMLRPC_NAME "XML-RPC tesaja"
#define XMLRPC_VERSION "0.1"
int main()
{
//declare
xmlrpc_env env;
xmlrpc_value *result = NULL;
xmlrpc_client_init(XMLRPC_CLIENT_NO_FLAGS, XMLRPC_NAME, XMLRPC_VERSION);
xmlrpc_env_init(&env);
result = xmlrpc_client_call(&env, "http://xmlrpc-c.sourceforge.net/api/sample.php" ,
"sample.sumAndDifference", "(ii)", //method
(xmlrpc_int32) 5, //var
(xmlrpc_int32) 3); //var
/* ma code */
char output[1024] = {0};
int l_output = 0;
/* ------------------ keluarin xml ------------------*/
xmlrpc_value *params;
xmlrpc_mem_block *xmlmemblockP = NULL;
params = xmlrpc_build_value(&env, "(ii)", (xmlrpc_int32) 5, (xmlrpc_int32) 7);
xmlmemblockP = XMLRPC_MEMBLOCK_NEW(char, &env, 0);
xmlrpc_serialize_call(&env, xmlmemblockP, "sample.sumAndDifference", params);
l_output = snprintf(output,XMLRPC_MEMBLOCK_SIZE(char, xmlmemblockP),"%s",XMLRPC_MEMBLOCK_CONTENTS(char, xmlmemblockP));
output[l_output] = '\0';
printf("submit data -> \n %s\n",output);
XMLRPC_MEMBLOCK_FREE(char, xmlmemblockP);
/* Dispose of our parameter array. */
xmlrpc_DECREF(params);
/* ------------------ keluarin xml ------------------*/
if(env.fault_occurred)
{
printf("err : %s\n",env.fault_string);
return 0;
}
// Parse our result value
xmlrpc_int32 sum, difference;
xmlrpc_decompose_value(&env, result, "{s:i,s:i,*}",
"sum", &sum,
"difference", &difference);
/* keluarin xml respon */
xmlmemblockP = XMLRPC_MEMBLOCK_NEW(char, &env, 0);
xmlrpc_serialize_response(&env,xmlmemblockP,result);
l_output = snprintf(output,XMLRPC_MEMBLOCK_SIZE(char, xmlmemblockP),"%s",XMLRPC_MEMBLOCK_CONTENTS(char, xmlmemblockP));
output[l_output] = '\0';
printf("respon data-> \n %s \n",output);
XMLRPC_MEMBLOCK_FREE(char, xmlmemblockP);
/* keluarin xml respon*/
if(env.fault_occurred)
{
printf("err : %s\n",env.fault_string);
return 0;
}
// Print out our sum and difference.
printf("Sum: %d, Difference: %d\n", (int) sum, (int) difference);
// Dispose of our result value.
xmlrpc_DECREF(result);
//Shutdown our XML-RPC client library.
xmlrpc_env_clean(&env);
xmlrpc_client_cleanup();
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#定义XMLRPC_名称“XML-RPC tesaja”
#定义XMLRPC_版本“0.1”
int main()
{
//申报
xmlrpc_env env;
xmlrpc_值*result=NULL;
xmlrpc_client_init(xmlrpc_client_NO_标志、xmlrpc_名称、xmlrpc_版本);
xmlrpc_env_init(&env);
结果=xmlrpc_客户端_调用(&env)http://xmlrpc-c.sourceforge.net/api/sample.php" ,
“sample.sumAndDifference”,“(ii)”,//方法
(xmlrpc_int32)5,//var
(xmlrpc_int32)3);//var
/*ma代码*/
字符输出[1024]={0};
int l_输出=0;
/*------------------keluarin xml------------------*/
xmlrpc_值*参数;
xmlrpc_mem_block*xmlmemblockP=NULL;
参数=xmlrpc_build_value(&env,“(ii)”,(xmlrpc_int32)5,(xmlrpc_int32)7);
xmlmemblockP=XMLRPC_MEMBLOCK_NEW(char和env,0);
xmlrpc_序列化_调用(&env,xmlmemblockP,“sample.sumAndDifference”,params);
l_output=snprintf(输出,XMLRPC_MEMBLOCK_大小(char,xmlmblockp),“%s”,XMLRPC_MEMBLOCK_内容(char,xmlmblockp));
输出[l_输出]='\0';
printf(“提交数据->\n%s\n”,输出);
XMLRPC_MEMBLOCK_FREE(char,xmlmblockp);
/*处理我们的参数数组*/
xmlrpc_DECREF(参数);
/*------------------keluarin xml------------------*/
如果(发生环境故障)
{
printf(“错误:%s\n”,环境故障\u字符串);
返回0;
}
//解析我们的结果值
xmlrpc_int32和,差;
xmlrpc_分解_值(&env,result,“{s:i,s:i,*}”,
“总和”&总和,
“差异”和“差异”;
/*keluarinxml响应*/
xmlmemblockP=XMLRPC_MEMBLOCK_NEW(char和env,0);
xmlrpc_序列化_响应(&env、xmlmblockp、result);
l_output=snprintf(输出,XMLRPC_MEMBLOCK_大小(char,xmlmblockp),“%s”,XMLRPC_MEMBLOCK_内容(char,xmlmblockp));
输出[l_输出]='\0';
printf(“响应数据->\n%s\n”,输出);
XMLRPC_MEMBLOCK_FREE(char,xmlmblockp);
/*keluarinxml响应*/
如果(发生环境故障)
{
printf(“错误:%s\n”,环境故障\u字符串);
返回0;
}
//打印出我们的总和和差额。
printf(“和:%d,差:%d\n”,(int)和,(int)差);
//处理我们的结果值。
xmlrpc_DECREF(结果);
//关闭我们的XML-RPC客户端库。
xmlrpc_env_clean(&env);
xmlrpc_client_cleanup();
返回0;
}
输出
submit data ->
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>sample.sumAndDifference</methodName>
<params>
<param><value><i4>5</i4></value></param>
<param><value><i4>7</i4></value></param>
</params>
</methodCall>
respon data->
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>sample.sumAndDifference</methodName>
params>
Expected XMLRPC_TYPE_ARRAY
submit data ->
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>sample.sumAndDifference</methodName>
<params>
<param><value><i4>5</i4></value></param>
<param><value><i4>7</i4></value></param>
</params>
</methodCall>
respon data->
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param><value><struct>
<member><name>sum</name>
<value><i4>8</i4></value></member>
<member><name>difference</name>
<value><i4>2</i4></value></member>
</struct></value></param>
</params>
/methodResponse>
Sum: 8, Difference: 2
提交数据->
sample.sumand差异
5.
7.
respon数据->
总和
8.
差异
2.
/方法响应>
和:8,差:2
幸运的是它做到了。
现在,这是我完成的第一个问题。
但第二个问题没有回答,有人介意回答左边的问题吗?好啦,卡佩德,i4和整数是一样的。它表示类型,在本例中对应于一个整数。
参考:
最好的,
卢乔