使用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");//判断有无片段并解析
}
}
使用C语言解析URL的更多相关文章
- 解析URL 获取某一个参数值
/** * 解析URL 获取某一个参数值 * * @param name 需要获取的字段 * @param webaddress URL * * @return 返回的参数对应的 value */ - ...
- 详解Node解析URL网址
前提给大家声明一下,我操作的环境是Mac终端下操作的.(前提是你先要下载好node.js) 说道URL 恐怕都不陌生,但是要说URL,就 必须先说下URI URI是统一资源标识符,是一个用于标识某一互 ...
- 正则表达式解析url参数
解析url参数正则:(?<=\?|&)[\w\={}\\\\,-:'\s'""]*(?=[^#\s]|) 意思是(?<=\?|&) 从?或&符号 ...
- PHP的学习--解析URL
PHP中有两个方法可以用来解析URL,分别是parse_url和parse_str. parse_url 解析 URL,返回其组成部分 mixed parse_url ( string $url [, ...
- Javascript 利用a标签自动解析URL分析网址实例
/* * @function: 通过a标签解析url标签 * @param:url url参数是字符串,解析的目标 通过IE6-9 chrome Firefox测试 * */ function par ...
- atitit.java解析sql语言解析器解释器的实现
atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...
- 利用 a 标签自动解析 url
很多时候,我们有从 url 中提取域名,查询关键字,变量参数值等的需求,然而我们可以让浏览器方便地帮助我们完成这一任务而不用写正则去抓取.方法就是先创建一个 a 标签然后将需要解析的 url 赋值给 ...
- php 使用pathinfo(), parse_url(), basename()解析URL
本文章向大家介绍解析URL的三种方法,分别为pathinfo()方法.parse_url()方法和basename()方法.每个方法都列举了一个实例,通过实例更容易理解这三个函数的使用方法和技巧,需要 ...
- php解析url的三种方法举例
使用php解析url的三个示例. 方法一: $url="http://www.jbxue.com"; file_get_contents($url); 方法二: // CURL 方 ...
随机推荐
- 接口测试 rest-assured 使用指南
转自:https://testerhome.com/topics/7060 原文:https://github.com/rest-assured/rest-assured/wiki/Usage本文gi ...
- Android中的Telephony学习笔记(2)
上一篇文章中学习了android.provider中Telephony类. 这一篇文章学习android.telephony包中的类,这些类是android提供给上层调用的API. 为监測基本电话信息 ...
- C#托付之愚见
C#托付起源 近期參加实习和奔走于各大招聘会,被问及非常多技术方面的问题.C#问的较多的就是托付和linq. linq之前已经写过一篇文章,能够參见 http://blog.csdn.net/yzys ...
- poj1691--Painting A Board(拓扑+dfs)
题目链接:点击打开链接 题目大意:一个矩形由n个小矩形组成,如今要给小矩形染色,可是颜料会向下滑,为了防止弄乱颜料,所以要先染上面的矩形,后然染以下的矩形.每一次改变颜色都要用一个新的刷子.问最小用多 ...
- window.location.href重定向 不会触发webview
通过window.location.href来重定向的,安卓不会触发shouldOverrideUrlLoading.
- Apache2.4 新virtualhost
创建配置文件 /etc/apache2/sites-available# sudo nano mysite.conf <VirtualHost *:> #ServerName hello. ...
- Sqlserver 实际开发中表变量的用法
在实际的开发中,我们可能遇到的问题是,在一个存储过程里面,我们可能要返回多段sql的结果集,但是最终怎么把多个结果集合成一块呢,那么这个时候临时表变量就来了 declare @tmp table ...
- 当Design Support Library遇上RecycleView
近期对Design Support Library中的一些新组件做了些研究,当中涉及到CoordinatorLayout.AppBarLayout.CollapsingToolbarLayout,为了 ...
- android开发笔记之fastboot的使用
fastboot命令大全 在终端中.我们输入: fastboot 对于这些命令.我不解释,慢慢使用.慢慢的就会明确是怎么回事了. android分区 分区 作用 splash1 开机画面.使用Nand ...
- springMVC --@RequestParam注解(后台控制器获取參数)
在SpringMVC后台控制层获取參数的方式主要有两种,一种是request.getParameter("name"),第二种是用注解@RequestParam直接获取. 1.获取 ...