C语言定义从URL中获取键值的接口
环境:centos7下,对客户端http请求进行解析,来获取有效键值(包括汉字)。
应用:有了它,服务器后台程序就可以获取前端请求的数据信息。
头文件
/* 这是一份关于从Http请求信息中提取键值的接口声明文件 */
#ifndef _URIDecode_H_
#define _URIDecode_H_
#include "status.h"
/*
* 相关数据类型
*/
typedef unsigned char uChar; /*
* 获取指定键的键值
*
* queryStr -- 请求信息的字符串
* keyName -- 指定的键名
* resultp -- (用指针)返回键值
* 返回值,如果操作成功返回OK;否则返回ERROR。 注意的是,键名不存在的话,键值返回NULL。
*/
STATUS
GetTheKeyValue(char const *queryStr, char const *keyName, uChar **resultp);
#endif
URIDecode.h
接口定义
/* 这是一份描述从Http请求信息中提取有效键值的接口定义文件 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "URIDecode.h"
#include "status.h" /*
* 内部接口
*
*
* 统计键值包含的字节数目。
*
* keyValue -- 指定的键值
* 返回值,返回统计的结果。
*/
static int
GetItsSize(char const *keyValue)
{
char const *p = NULL;
char ch;
int counter = ; if(keyValue == NULL) //检查参数是否有效
{
fprintf(stdout, "传递给函数GetItsSize的参数keyValue无效。\n");
return -;
} for(p = keyValue; (ch = *p) != '\0'; p ++) //统计键值的长度
{
if(ch == '&') //表示键值结束
{
break;
}
if(ch == '%')
{
p += ;
}
counter ++;
}
return counter;
} /*
* 把两位16进制转换为10进制,并返回结果。
*
* digit1 -- 第一位16进制
* digit2 -- 第二位16进制
* 返回值,返回结果(返回类型是无符号整型)。
*/
static uChar
MergeThem(char digit1, char digit2)
{
uChar result;
int v1,v2; v1 = (digit1 <= 'Z' && digit1 >= 'A')? digit1 - 'A' + : digit1 - '';
v2 = (digit2 <= 'Z' && digit2 >= 'A')? digit2 - 'A' + : digit2 - '';
result = v1 * + v2;
return result;
} /*
* 外部接口
*
*
* 获取指定键的键值。
*
* queryStr -- 请求信息的字符串
* keyName -- 指定的键名
* resultp -- (用指针)返回键值
* 返回值,如果操作成功返回OK;否则返回ERROR。
*/
STATUS
GetTheKeyValue(char const *queryStr, char const *keyName, uChar **resultp)
{
uChar *result = NULL; //存放键值
char const *p = NULL;
char ch;
int keyValueSize;
int i = ; if(queryStr == NULL) //检查参数是否有效
{
fprintf(stdout, "传递给函数GetTheKeyValue的参数queryStr无效。\n");
return ERROR;
}
if(keyName == NULL)
{
fprintf(stdout, "传递给函数GetTheKeyValue的参数keyName无效。\n");
return ERROR;
}
if(resultp == NULL)
{
fprintf(stdout, "传递给函数GetTheKeyValue的参数resultp无效。\n");
return ERROR;
} p = strstr(queryStr, keyName); //找到键值起始位置
if(p == NULL) //如果指定的键名不存在
{
*resultp = result; //键值返回NULL
return OK;
} p = strchr(p, '=');
keyValueSize = GetItsSize(++ p); result = (uChar *)malloc((keyValueSize + ) * sizeof(uChar)); //申请一段内存来存放键值
if(result == NULL)
{
fprintf(stdout, "内存不足。\n");
exit(EXIT_FAILURE);
} while((ch = *p) != '\0' && ch != '&') //获取有效键值
{ if(ch == '%')
{
result [i] = MergeThem(p[], p[]);
p += ;
}
else
{
result [i] = (uChar)ch;
p ++;
}
i ++;
}
result [i] = '\0'; //结尾 *resultp = result;
return OK;
}
C语言定义从URL中获取键值的接口的更多相关文章
- C#获取url中参数键值对的方法
方法如下: /// <summary> /// 遍历Url中的参数列表 /// </summary> /// <returns>如:(?userName=keley ...
- php中的常用数组函数(五)(数组中获取键名集合)
array_keys($arr, $search_value, $strict); --数组中获取键名的集合. //参数1 要检索的数组:参数2 要检索的键值 默认NULL: 参数3 是否严格比较(= ...
- js使用正则表达式从url中获取参数值
//从url中获取参数值 function getvl(name) { var reg = new RegExp("(^|\\?|&)"+ name +"=([^ ...
- js中以键值对的形式当枚举
js中以键值对的形式当枚举var Penum= { B: "姓名", C: "所属居委", D: "证件号", E: "性别&qu ...
- linux驱动之中断方式获取键值
linux驱动之中断方式获取键值 ----------------------------------------------------------------------------------- ...
- 在C#中用Linq从属性文件中读取键值对Key-Value Pair
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在C#中用Linq从属性文件中读取键值对Key-Value Pair.
- PHP如何根据数组中的键值进行排序
主要是使用PHP的排序函数,asort()和arsort(). 为了减少代码的耦合性,我们将根据数组中的键值进行排序封装成一个函数 <?php $array = array( array(), ...
- Redis中的键值过期操作
1.过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key 在 n 秒后过期: pexpire key milliseconds:设置 key ...
- js获取页面url中的各项值
一. 通过window.location获取各项参数 1.获取页面完整的url url = window.location.href; 2.获取页面的域名 host = window.location ...
随机推荐
- 关于样式选择器:hover出现忽闪现象
有时候在做项目的时候会想给一个元素添加一个遮罩效果,然后鼠标划过去的时候,遮罩消失,一般最简单的方法就是使用样式选择器:hover,但是经历过才知道恶心,有种灯泡快要坏的感觉,闪瞎自己的眼睛,于是诞生 ...
- C语言格式化输入输出
%i和%d之间的区别 作为匹配整数的转换说明,printf格式串中两者并没有区别,但是在scanf格式串中%d只能匹配十位制整数,而%i可以匹配八进制(前缀为0,如086).十进制或十六进制(前缀0x ...
- 几个常用EL表达式的用法
转载至 http://yqsshr.blog.51cto.com/469059/131824 1,用来获取表单数据 param 和 paramValues 1.jsp 的有如下表单 <for ...
- vue中引入swiper(vue中的滑块组件vue-awesome-swiper)
第一步安装 npm install vue-awesome-swiper --save 第二部在main.js中引入 import VueAwesomeSwiper from 'vue-awesome ...
- Project 6:上楼梯问题
问题简述:梯有N阶,上楼可以一步上一阶,也可以一步上二阶.编写一个程序,计算共有多少中不同的走法. 样例输入: 5 样例输出: 8 #include <stdio.h> int count ...
- 只查看tomcat进程,不包括grep
ps aux | grep tomcat | grep -v "grep" | awk '{print $2}'
- jquery 函数大全
jquery函数大全转载 Attribute:$(”p”).addClass(css中定义的样式类型); 给某个元素添加样式$(”img”).attr({src:”test.jpg”,alt:”te ...
- 【集美大学1411_助教博客】团队作业6——展示博客(Alpha版本)
写在前面的话 工作还真是应该抓紧做呢,以下评分是助教在出差前评的,但出差回来就忘记了大部分内容.同学们都在预期时间内完成了自己的alpha项目.由于助教的频繁出差,评分工作落下一大截,在此表示欠意,会 ...
- 201521123091 《Java程序设计》第12周学习总结
Java 第十一周总结 第十一周的作业. 目录 1.本章学习总结 2.Java Q&A 3.码云上代码提交记录及PTA实验总结 4.课后阅读 1.本章学习总结 1.1 以你喜欢的方式(思维导图 ...
- 个人作业3--------个人总结(Alpha版本)
1.问题 从第一次写博客开始,就开始意识到自己所犯的错误了,助教提醒命名规范的问题,还给了Java编码规范的链接,让自己以后能注意到这些问题. 对设计的需求分析需要团队一起,一开始分配任务是给个人分配 ...