zoukankan      html  css  js  c++  java
  • 使用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(" ");//判断有无片段并解析
             
        }
    }   

  • 相关阅读:
    k8s之docker被屏蔽后下载方法
    代码合并工具Beyond Compare的使用技巧
    (转)设计模式——观察者模式
    notepad问题汇总
    个人构建问题
    内部git常用总结
    (转)动态规划算法—买卖股票的最佳时机系列
    (转)java中引用传递和值传递
    互联网面试题
    (转)UML类图与类的关系详解
  • 原文地址:https://www.cnblogs.com/xkzy/p/3956162.html
Copyright © 2011-2022 走看看