簡單解析URL

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 1024+10

char url[MAXN] = "http://study.163.com/curricula/cs.htm"; 
 
int main(int argc, char *argv[])
{
    const char *parseptr1;
    const char *parseptr2;
    char host[BUFSIZ];
    char resource[BUFSIZ];
    int len, i;
    
    parseptr2 = url;
    
    parseptr1 = strchr(parseptr2, ':');
    
    if(NULL == parseptr1)
    {
        printf("protocol: Default <http>\n");/*解析協議*/
        parseptr1 = strchr(parseptr2,'/');
        len = parseptr1 - parseptr2;
        if(NULL == parseptr1)  /*解析主機名*/ 
        {
            printf("host: ");
            for(i = 0; i < strlen(parseptr2); i++)
            {
                printf("%c", parseptr2[i]);
            }
            strcpy(host, parseptr2);
            printf("\n");
        }
        else
        {
            printf("host: ");
            for(i = 0; i < len; i++)
            {
                printf("%c", parseptr2[i]);
            }
            strcpy(host, parseptr2);
            printf("\n");
        }
        printf("resource: "); /*解析資源名*/ 
        for(i = len; i < strlen(parseptr2); i++)
        {
            printf("%c", parseptr2[i]);
        }
        strcpy(resource, parseptr2);
        printf("\n");
    }
    else
    {
        len = parseptr1 - parseptr2;
        printf("protocol: "); /*解析協議*/ 
        for(i = 0; i < len; i++)
        {
            printf("%c", parseptr2[i]);
        }
        printf("\n");
        
        parseptr1++;  /*讓parseptr1指向「//」的第一個字符*/
        parseptr2 = parseptr1;  /*讓parseptr2指向「//」的第一個字符*/
        for(i = 0; i < 2; i++)
        {
            parseptr2++;  /*讓parseptr2指向「//」後面的第一個字符*/ 
        }
        
        parseptr1 = strchr(parseptr2, '/');
        len = parseptr1 - parseptr2;
        printf("host: "); /*解析主機名*/ 
        if(NULL == parseptr1)
        {
            for(i = 0; i < strlen(parseptr2); i++)
            {
                printf("%c", parseptr2[i]);
            }
            strcpy(host, parseptr2);
            printf("\n");
        }  
        else
        {
            for(i = 0; i < len; i++)
            {
                printf("%c", parseptr2[i]);
            }
            strcpy(host, parseptr2);
            printf("\n");
        }
        
        printf("resource: ");/*解析資源名*/ 
        for(i = len; i < strlen(parseptr2); i++)
        {
            printf("%c", parseptr2[i]);
        }
        strcpy(resource, parseptr2);
        printf("\n");
    }
    return 0;
}
相關文章
相關標籤/搜索