void ParseURL(char* url,char* protocol,int lprotocol, char* host,int lhost,char* request,int lrequest,int *port) { char *work,*ptr,*ptr2; *protocol = *host = *request = 0; *port=80; work = strdup(url); strupr2(work); ptr = strchr(work,':'); if(ptr!=NULL) { *(ptr++) = 0; strcpy(protocol,work); } else { strcpy(protocol,"HTTP"); ptr = work; } if( (*ptr=='/') && (*(ptr+1)=='/') ) ptr+=2; ptr2 = ptr; while( ValidHostChar(*ptr2) && *ptr2 ) ptr2++; *ptr2=0; strcpy(host,ptr); strcpy(request,url + (ptr2-work)); ptr = strchr(host,':'); if(ptr!=NULL) { *ptr=0; *port = atoi(ptr+1); } free(work); }
//******************************************************************************************************* // ParseURL: // Used to break apart a URL such as // http://www.localhost.com:80/TestPost.htm into protocol, port, host and request. //******************************************************************************************************* void Request::ParseURL(LPCSTR url,LPSTR protocol,int lprotocol, LPSTR host,int lhost,LPSTR request,int lrequest,int *port) { char *work,*ptr,*ptr2; *protocol = *host = *request = 0; *port=80; work = strdup(url); strupr(work); ptr = strchr(work,':'); // find protocol if any if(ptr!=NULL) { *(ptr++) = 0; lstrcpyn(protocol,work,lprotocol); } else { lstrcpyn(protocol,"HTTP",lprotocol); ptr = work; } if( (*ptr=='/') && (*(ptr+1)=='/') ) // skip past opening /'s ptr+=2; ptr2 = ptr; // find host while( ValidHostChar(*ptr2) && *ptr2 ) ptr2++; *ptr2=0; lstrcpyn(host,ptr,lhost); lstrcpyn(request,url + (ptr2-work),lrequest); // find the request ptr = strchr(host,':'); // find the port number, if any if(ptr!=NULL) { *ptr=0; *port = atoi(ptr+1); } free(work); }