使用C语言解析URL
1. [代码]容易写成自己输入URL,这里测试一个例子
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAXN 1024+10
char 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 )//判断有无端口号
{http://www.huiyi8.com/hunsha/chuangyi/
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");//判断有无片段并解析
}
}
最新文章
- Linux虚拟机中配置JDK环境变量
- Sql Server创建函数
- three.js全景
- Psam_ISO7816
- 基础知识系列☞GET和POST→及相关知识
- C# WinForm开发系列 - ComboBox
- 深入理解Linux内核-第七章 进程调度
- MVC个人认为的终极分页
- isNotNull与isNotEmpty的区别
- Unity3D之Legacy动画系统学习笔记
- QT全局热键(用nativeKeycode封装API,不跨平台)
- C#中关键字 &#39;User&#39; 附近有语法错误
- C++学习(三十八)(C语言部分)之 排序(冒泡 选择 插入 快排)
- 在chrome console添加jQuery支持
- 异步编程(async&;await)
- Linux 中的 tar
- spring-boot-starter-data-elasticsearch 整合elasticsearch 5.x详解
- Java Web项目总结
- Solr系列四:Solr(solrj 、索引API 、 结构化数据导入)
- python安装lib库