码迷,mamicode.com
首页 > 编程语言 > 详细

C语言定义从URL中获取键值的接口

时间:2017-10-02 18:25:59      阅读:331      评论:0      收藏:0      [点我收藏+]

标签:eof   play   符号   eth   style   结束   一段   out   err   

环境:centos7下,对客户端http请求进行解析,来获取有效键值(包括汉字)。

应用:有了它,服务器后台程序可以借此对数据库查询相关信息。

头文件

技术分享
 1 /* 这是一份关于从Http请求信息中提取键值的接口声明的头文件 */
 2 #ifndef _HEAD_H_
 3 #define _HEAD_H_
 4 #include "status.h"
 5 /*
 6  * 相关类型
 7  */
 8 typedef unsigned char uChar;
 9 
10 /*
11  * 获取指定键的键值
12  *
13  * queryStr -- 请求信息的字符串
14  * keyName -- 指定的键名
15  * resultp -- (用指针)返回键值
16  * 返回值,如果操作成功返回OK;否则返回ERROR。
17  */
18 STATUS
19 GetTheKeyValue(char const *queryStr, char const *keyName, uChar **resultp);
20 #endif
URIDecode.h

接口定义

技术分享
  1 /* 这是一份描述从Http请求信息中提取有效键值的接口定义文件 */
  2 #include <stdio.h>
  3 #include <stdlib.h>
  4 #include <string.h>
  5 #include "head.h"
  6 #include "status.h"
  7 
  8 /*
  9  * 内部接口
 10  *
 11  *
 12  * 统计键值的字节数目。
 13  *
 14  * keyValue -- 指定的键值
 15  * 返回值,返回统计的结果。
 16  */
 17 static int
 18 GetItsSize(char const *keyValue)
 19 {
 20         char const *p = NULL;
 21         char ch;
 22         int counter = 0;
 23 
 24         if(keyValue == NULL) //检查参数是否有效
 25         {
 26                 fprintf(stdout, "传递给函数GetItsSize的参数keyValue无效。\n");
 27                 return -1;
 28         }
 29 
 30         for(p = keyValue; (ch = *p) != \0; p ++) //统计键值的长度
 31         {
 32                 if(ch == &) //表示键值结束
 33                 {
 34                         break;
 35                 }
 36                 if(ch == %)
 37                 {
 38                         p += 2;
 39                 }
 40                 counter ++;
 41         }
 42         return counter;
 43 }
 44 
 45 /*
 46  * 把两位16进制转换为10进制,并返回结果。
 47  *
 48  * digit1 -- 第一位16进制
 49  * digit2 -- 第二位16进制
 50  * 返回值,返回结果(返回类型是无符号整型)。
 51  */
 52 static uChar
 53 MergeThem(char digit1, char digit2)
 54 {
 55         uChar result;
 56         int v1,v2;
 57 
 58         v1 = (digit1 <= Z && digit1 >= A)? digit1 - A + 10 : digit1 - 0;
 59         v2 = (digit2 <= Z && digit2 >= A)? digit2 - A + 10 : digit2 - 0;
 60         result = v1 * 16 + v2;
 61         return result;
 62 }
 63 
 64 
 65 /*
 66  * 外部接口
 67  *
 68  *
 69  * 获取指定键的键值。
 70  * 
 71  * queryStr -- 请求信息的字符串
 72  * keyName -- 指定的键名
 73  * resultp -- (用指针)返回键值
 74  * 返回值,如果操作成功返回OK;否则返回ERROR。
 75  */
 76 STATUS
 77 GetTheKeyValue(char const *queryStr, char const *keyName, uChar **resultp)
 78 {
 79         uChar *result = NULL; //存放键值
 80         char const *p = NULL;
 81         char ch;
 82         int keyValueSize;
 83         int i = 0;
 84 
 85         if(queryStr == NULL) //检查参数是否有效
 86         {
 87                 fprintf(stdout, "传递给函数GetTheKeyValue的参数queryStr无效。\n");
 88                 return ERROR;
 89         }
 90         if(keyName == NULL)
 91         {
 92                 fprintf(stdout, "传递给函数GetTheKeyValue的参数keyName无效。\n");
 93                 return ERROR;
 94         }
 95         if(resultp == NULL)
 96         {
 97                 fprintf(stdout, "传递给函数GetTheKeyValue的参数resultp无效。\n");
 98                 return ERROR;
 99         }
100 
101         p = strstr(queryStr, keyName); //找到键值起始位置
102         p = strchr(p, =);
103         keyValueSize = GetItsSize(++ p);
104 
105         result = (uChar *)malloc((keyValueSize + 1) * sizeof(uChar)); //申请一段内存来存放键值
106         if(result == NULL)
107         {
108                 fprintf(stdout, "内存不足。\n");
109                 exit(EXIT_FAILURE);
110         }
111 
112         while((ch = *p) != \0 && ch != &) //获取有效键值
113         {
114                 if(ch == +)
115                 {
116                         result [i] = (uChar) ;
117                         p ++;
118                 }
119                else if(ch == %)
120                 {
121                         result [i] = MergeThem(p[1], p[2]);
122                         p += 3;
123                 }
124                 else
125                 {
126                         result [i] = (uChar)ch;
127                         p ++;
128                 }
129                 i ++;
130         }
131         result [i] = \0; //结尾
132 
133         *resultp = result;
134         return OK;
135 }
URIDecode.c

 

C语言定义从URL中获取键值的接口

标签:eof   play   符号   eth   style   结束   一段   out   err   

原文地址:http://www.cnblogs.com/the-one/p/7620495.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!