C语言 解析URL
来源:互联网 发布:爱奇艺点击率换算法 编辑:程序博客网 时间:2024/06/05 16:52
最近需要用到解析一个URL的合法性,找了半天发现C语言没有解析URL的库函数,
那么只好自己去写了。
在网上找了一段代码,非常好,亲测有效,特来分享!
转载地址:https://www.oschina.net/code/snippet_656503_12501
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#define MAXN 1024+10char url [MAXN] = "http://www.google.com:80/wiki/Search?search=train&go=Go#steammachine"; int main(){ const char *parseptr1; const char *parseptr2; int len; int i; parseptr2 = url; parseptr1 = strchr(parseptr2, ':'); if ( NULL == parseptr1 ) { printf("URL错误!\n"); return 0; } len = parseptr1 - parseptr2; for ( i = 0; i < len; i++ ) { if ( !isalpha(parseptr2[i]) ) { printf("URL错误!\n"); return 0; } } printf("protocol: "); for(i=0;i<len;i++) printf("%c",parseptr2[i]); printf("\n");//解析协议 parseptr1++; parseptr2 = parseptr1; for ( i = 0; i < 2; i++ ) { if ( '/' != *parseptr2 ) { printf("URL错误!\n"); return 0; } parseptr2++; } parseptr1 = strchr(parseptr2, ':'); if ( NULL == parseptr1 )//判断有无端口号 { parseptr1 = strchr(parseptr2, '/'); if ( NULL == parseptr1 ) { printf("URL错误!\n"); return 0;} len = parseptr1 - parseptr2; printf("host: "); for(i=0;i<len;i++) printf("%c",parseptr2[i]); printf("\n");//解析主机 } else{ len = parseptr1 - parseptr2; printf("host: "); for(i=0;i<len;i++) printf("%c",parseptr2[i]); printf("\n"); parseptr1++; parseptr2 = parseptr1; parseptr1 = strchr(parseptr2, '/'); if ( NULL == parseptr1 ) { printf("URL错误!\n"); return 0; } len = parseptr1 - parseptr2; printf("port: "); for(i=0;i<len;i++) printf("%d",(parseptr2[i]-48)); printf("\n");//解析端口 } parseptr1++; parseptr2 = parseptr1; while ( '\0' != *parseptr1 && '?' != *parseptr1 && '#' != *parseptr1 ) { parseptr1++; } len = parseptr1 - parseptr2; printf("path: "); for(i=0;i<len;i++) printf("%c",parseptr2[i]); printf("\n");//解析路径 parseptr2=parseptr1; if ( '?' == *parseptr1 ) { parseptr2++; parseptr1 = parseptr2; while ( '\0' != *parseptr1 && '#' != *parseptr1 ) { parseptr1++; } len = parseptr1 - parseptr2; printf("query: "); for(i=0;i<len;i++) printf("%c",parseptr2[i]);//判断有无询问并解析 printf("\n"); } parseptr2=parseptr1; if ( '#' == *parseptr1 ) { parseptr2++; parseptr1 = parseptr2; while ( '\0' != *parseptr1 ) { parseptr1++; } len = parseptr1 - parseptr2; printf("fragment: "); for(i=0;i<len;i++) printf("%c",parseptr2[i]); printf("\n");//判断有无片段并解析
完!!
0 0
- C语言解析url
- C语言 解析URL
- 使用C语言解析URL
- URL的解析,C语言实现
- C语言URL解析器(代码分享)
- HTTP协议URL解析的C语言实现
- url解析c算法
- C语言 URL编码
- C语言之解析
- c语言基础解析
- C语言文本文件解析
- C语言关键字解析
- C语言深度解析
- c语言解析xml
- c语言解析
- C语言解析JSON
- sizeof解析C语言
- C语言--配置文件解析
- leetcode解题之219 # Contains Duplicate II Java版 (数组中出现重复元素)
- 排序总结---快排
- 西普实验吧密码学CTF--数码管
- java 自学日记 day
- Java设计模式《一》简单工厂模式
- C语言 解析URL
- 聊聊并发(三)Java线程池的分析和使用
- 排序总结---选择排序
- 【逻辑思考】你真的有权力活出自己吗?
- 欢迎使用CSDN-markdown编辑器
- 程序设计实践课程记录2
- 已知圆的半径和弧长求弧的终点坐标(360春招跑步编程题)
- 基站定位LAC,CID转经纬度
- (JVM1)Java内存区域与内存溢出异常之二