• 使用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错误! ");
            return 0;
        }
        len = parseptr1 - parseptr2;
        for ( i = 0; i < len; i++ ) {
            if ( !isalpha(parseptr2[i]) ) {
                printf("URL错误! ");
                return 0;
            }
        }
        printf("protocol: ");
        for(i=0;i<len;i++)
            printf("%c",parseptr2[i]);
        printf(" ");//解析协议
        parseptr1++;
        parseptr2 = parseptr1;
        for ( i = 0; i < 2; i++ ) {
            if ( '/' != *parseptr2 ) {
                printf("URL错误! ");
                return 0;
            }
            parseptr2++;
        }
        parseptr1 = strchr(parseptr2, ':');
        if ( NULL == parseptr1 )//判断有无端口号
        {http://www.huiyi8.com/hunsha/chuangyi/
            parseptr1 = strchr(parseptr2, '/');
            if ( NULL == parseptr1 ) {
            printf("URL错误! ");
            return 0;}创意婚纱照片
            len = parseptr1 - parseptr2;
            printf("host: ");
            for(i=0;i<len;i++)
               printf("%c",parseptr2[i]);
            printf(" ");//解析主机
        }
        else{
        len = parseptr1 - parseptr2;
        printf("host: ");
        for(i=0;i<len;i++)
            printf("%c",parseptr2[i]);
        printf(" ");
        parseptr1++;
        parseptr2 = parseptr1;
        parseptr1 = strchr(parseptr2, '/');
        if ( NULL == parseptr1 ) {
            printf("URL错误! ");
            return 0;
        }
        len = parseptr1 - parseptr2;
        printf("port: ");
        for(i=0;i<len;i++)
            printf("%d",(parseptr2[i]-48));
        printf(" ");//解析端口
        }
        parseptr1++;
        parseptr2 = parseptr1;
        while ( '' != *parseptr1 && '?' != *parseptr1  && '#' != *parseptr1 ) {
            parseptr1++;
        }
        len = parseptr1 - parseptr2;
        printf("path: ");
            for(i=0;i<len;i++)
               printf("%c",parseptr2[i]);
            printf(" ");//解析路径
        parseptr2=parseptr1;
        if ( '?' == *parseptr1 ) {
            parseptr2++;
            parseptr1 = parseptr2;
            while ( '' != *parseptr1 && '#' != *parseptr1 ) {
                parseptr1++;
            }
            len = parseptr1 - parseptr2;
        printf("query: ");
        for(i=0;i<len;i++)
            printf("%c",parseptr2[i]);//判断有无询问并解析
        printf(" ");
        }
        parseptr2=parseptr1;
        if ( '#' == *parseptr1 ) {
            parseptr2++;
            parseptr1 = parseptr2;
            while ( '' != *parseptr1 ) {
                parseptr1++;
            }
            len = parseptr1 - parseptr2;
        printf("fragment: ");
        for(i=0;i<len;i++)
            printf("%c",parseptr2[i]);
        printf(" ");//判断有无片段并解析
             
        }
    }   

  • 相关阅读:
    古典兔子问题
    (I/O流)在100ms内桌面上生成一个200M大小的文件
    搭建手机UI自动化
    关于String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    关于数据库范式的理解
    Orcl分页查询的语法示例
    Eclipse alt+/语法不提示的解决方法
    redis 使用rdb从高版本迁移至低版本
    redis集群详解
    Linux firewall防火墙设置
  • 原文地址:https://www.cnblogs.com/xkzy/p/3956162.html
Copyright © 2020-2023  润新知