使用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 方 ...
随机推荐
- POJ 2001 Shortest Prefixes 【 trie树(别名字典树)】
Shortest Prefixes Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 15574 Accepted: 671 ...
- UNP学习笔记(第八章 基本UDP套接字编程)
UDP应用程序客户不与服务器建立连接,而是只管使用sendto函数给服务器发送数据报,其中必须指定目的地的地址作为参数. 下图给出典型的UDP客户/服务器程序的函数调用. recvfrom和sendt ...
- javascript if(条件)------------条件中可以使用的值
1.布尔变量true/false2.数字非0,非NaN/ ( 或NaN) NaN--------Not a Number 3.对象非null/(null或undefined) 4.字符串非空串(&qu ...
- C#中回调函数的使用方法和区别
归纳来说有两种方式,一种是委托型回调,另一种是接口型回调 委托型回调 委托型回调包括纯委托型和事件型,他们的实现方式是通过公开成员注入的方式,其中纯委托型还可以用构造函数注入.方法注入的方式 接口型回 ...
- linux SPI驱动——spidev之deive(五)
1.定义board设备 1: struct spi_board_info { 2: /* the device name and module name are coupled, like platf ...
- Boost.Asio c++ 网络编程翻译(11)
*_at方法 这些方法在一个流上面做随机存取操作.你来指定read和write操作从什么地方開始(offset): async_read_at(stream, offset, buffer [, co ...
- Mac修改默认python版本
研究python爬虫,需要用到Beautiful Soup 但是Mac默认的python版本为2.7 自己安装了3.6的版本 import 报错 查找资料: Mac在启动,会先加载系统配置文件(包括~ ...
- 【Python基础】之异常
一.常见异常 try: open('abc.txt','r') except FileNotFoundError: print('异常啦!') 输出结果: ======= 异常啦! 我们通过 open ...
- 【WPF学习笔记】之如何把数据库里的值读取出来然后显示在页面上:动画系列之(六)(评论处有学习资料及源码)
(应博友们的需要,在文章评论处有源码链接地址,以及WPF学习资料.工具等,希望对大家有所帮助) ...... 承接系列五 上一节讲了,已经把数据保存到数据库并且删除数据,本讲是把已经存在的数据从数据库 ...
- 利用树的先序和后序遍历打印 os 中的目录树
[0]README 0.1)本代码均为原创,旨在将树的遍历应用一下下以加深印象而已:(回答了学习树的遍历到底有什么用的问题?)你对比下linux 中的文件树 和我的打印结果就明理了: 0.2)我们采用 ...