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的更多相关文章

  1. 解析URL 获取某一个参数值

    /** * 解析URL 获取某一个参数值 * * @param name 需要获取的字段 * @param webaddress URL * * @return 返回的参数对应的 value */ - ...

  2. 详解Node解析URL网址

    前提给大家声明一下,我操作的环境是Mac终端下操作的.(前提是你先要下载好node.js) 说道URL 恐怕都不陌生,但是要说URL,就 必须先说下URI URI是统一资源标识符,是一个用于标识某一互 ...

  3. 正则表达式解析url参数

    解析url参数正则:(?<=\?|&)[\w\={}\\\\,-:'\s'""]*(?=[^#\s]|) 意思是(?<=\?|&) 从?或&符号 ...

  4. PHP的学习--解析URL

    PHP中有两个方法可以用来解析URL,分别是parse_url和parse_str. parse_url 解析 URL,返回其组成部分 mixed parse_url ( string $url [, ...

  5. Javascript 利用a标签自动解析URL分析网址实例

    /* * @function: 通过a标签解析url标签 * @param:url url参数是字符串,解析的目标 通过IE6-9 chrome Firefox测试 * */ function par ...

  6. atitit.java解析sql语言解析器解释器的实现

    atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...

  7. 利用 a 标签自动解析 url

    很多时候,我们有从 url 中提取域名,查询关键字,变量参数值等的需求,然而我们可以让浏览器方便地帮助我们完成这一任务而不用写正则去抓取.方法就是先创建一个 a 标签然后将需要解析的 url 赋值给  ...

  8. php 使用pathinfo(), parse_url(), basename()解析URL

    本文章向大家介绍解析URL的三种方法,分别为pathinfo()方法.parse_url()方法和basename()方法.每个方法都列举了一个实例,通过实例更容易理解这三个函数的使用方法和技巧,需要 ...

  9. php解析url的三种方法举例

    使用php解析url的三个示例. 方法一: $url="http://www.jbxue.com"; file_get_contents($url); 方法二: // CURL 方 ...

随机推荐

  1. AutoCAD如何移动零件和缩放零件图

    如下图所示,我想要把这个零件放大并移动到图纸的中央,先全部选中这个零件,方法是在左上角点一下,然后拖出一个矩形包围整个零件   然后点击右侧的缩放命令,底部的命令栏变成指定基点的时候,在这个图纸的右上 ...

  2. 360Webscan Bypass

    来到select正则: ? 1 \<.+javascript:window\[.{1}\\x|<.*=(&#\d+?;?)+?>|<.*(data|src)=data: ...

  3. 微信小程序 - 时间戳转时间

    获取当前时间:十位unix时间戳 var timestamps = Math.round(new Date().getTime() / 1000).toString(); 时间戳转时间(官方自带) 使 ...

  4. Git 学习之--安装配置GitHub

    楼主今天学习了一下Git的使用,而且Androdi studio 下加入了Git插件,成功提交项目到自己Github个人主页 watermark/2/text/aHR0cDovL2Jsb2cuY3Nk ...

  5. 【Python】学习笔记十五:循环对象

    循环对象 所谓的循环对象,包含有一个next()方法(python3中为__next__() ),这个方法的目的就是进行到下一个结果,而在结束一系列结果之后,举出StopIteration错误 当一个 ...

  6. Chrome 插件 CrxMouse 去除后门优化版

    说明 CrxMouse 是一款挺不错的 Chrome 插件.仅仅是据说这个插件会在后台偷偷的上传用户的浏览数据,无论上传的内容是不是涉及隐私数据,总让人认为不放心,可是因为插件本身功能还是挺好用的,所 ...

  7. 处理字符串的一些C函数

    注意:以下函数都包含在ctype.h头文件中 1.isalpha函数 用来判断得到的参数是不是字母 #include<stdio.h> #include<ctype.h> in ...

  8. linux脚本实现自己主动输入password

    使用Linux的程序猿对输入password这个举动一定不陌生,在Linux下对用户有严格的权限限制,干非常多事情越过了权限就得输入password.比方使用超级用户运行命令,又比方ftp.ssh连接 ...

  9. python学习(十四)面向对象

    Python中的面向对象,先写类,会生成类对象,类对象然后创建对象,对象就可以拿来用了. Python支持多重继承. class语句创建类对象,并将其赋值给变量名. class语句内的赋值语句会创建类 ...

  10. 【Python基础】之for循环、数组字典

    一. for循环实例 1.循环字符串 Python Shell: for i in "hello": print(i) h e l l o 2.循环数组Python Shell: ...