首页
社区
课程
招聘
[原创]获取URL中主机域名的小技巧!
发表于: 2013-10-6 07:28 12891

[原创]获取URL中主机域名的小技巧!

2013-10-6 07:28
12891
大家根据以下文章自由发挥.
以下均返回www.baidu.com
printf("%s\n", splitFileName("http://www.baidu.com/test/1").c_str());
printf("%s\n", splitFileName("www.baidu.com/test/1").c_str());


std::string splitHostDomain(const std::string& str) {
	if (!str.compare("http:")) { 此处有误,应该改为:!str.compare(0,5,"http:")
		size_t found = str.find_first_of("/\\");
		std::string str1 = str.substr(found + 2);
		found = str1.find_first_of("/\\");
		return (str1.substr(0, found));
	}
	else{
		size_t found = str.find_first_of("/\\");
		return (str.substr(0, found));
	}
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 319
活跃值: (1026)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
2013-10-6 09:34
0
雪    币: 541
活跃值: (654)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
3
楼主没考虑https
2013-10-6 12:24
0
雪    币: 80
活跃值: (109)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
程序崩溃。
=========================
刚才忘了加.c_str()。可以使用,谢谢楼主
2013-10-6 12:54
0
雪    币: 239
活跃值: (190)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
好高深的算法,学习了
2013-10-6 14:05
0
雪    币: 239
活跃值: (190)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
typedef enum
{
	TYPE_NULL,	//XParseURL分析出错,或者地址错误
	TYPE_FTP,
	TYPE_HTTP,
	TYPE_HTTPS,
}URLTYPE;

URLTYPE XParseURL( LPCTSTR lpURL,int *nPort,LPTSTR lpszHost,LPTSTR lpszObject)
{
	URLTYPE	urltype;
	int		nSize;
	int		i;
	TCHAR	lpszURL[1024];
	LPCTSTR	lpHttp = _T("http://");
	LPCTSTR	lpHttps = _T("https://");
	LPCTSTR	lpftp = _T("ftp://");

	lstrcpy( lpszURL,lpURL );

	for( i = 0;i<lstrlen(lpszURL);i++)
	{
		if( _T('\\') == lpszURL[i] ) lpszURL[i] = _T('/');
	}

	//判断协议
	if( CSTR_EQUAL == CompareString( LOCALE_USER_DEFAULT,NORM_IGNORECASE,lpHttp,lstrlen(lpHttp),lpURL,lstrlen(lpHttp) ) )
	{
		nSize = lstrlen(lpHttp);
		urltype = TYPE_HTTP;
		if(nPort)*nPort = 80;
	}else if( CSTR_EQUAL == CompareString( LOCALE_USER_DEFAULT,NORM_IGNORECASE,lpHttps,lstrlen(lpHttps),lpURL,lstrlen(lpHttps) ) )
	{
		nSize = lstrlen(lpHttps);
		urltype = TYPE_HTTPS;
		if(nPort)*nPort = 443;
	}else if( CSTR_EQUAL == CompareString( LOCALE_USER_DEFAULT,NORM_IGNORECASE,lpftp,lstrlen(lpftp),lpURL,lstrlen(lpftp) ) )	
	{
		nSize = lstrlen(lpftp);
		urltype = TYPE_FTP;
		if(nPort)*nPort = 21;
	}else
	{
		urltype = TYPE_NULL;
		return urltype;
	}


	//找页面
	for( i = nSize;i<lstrlen(lpszURL);i++)
	{
		if( _T('/') == lpszURL[i] )
		{
			if(lpszObject)lstrcpy( lpszObject,&lpszURL[i+1] );
			lpszURL[i] = 0;
			break;
		}
	}

	//找端口
	for( i = nSize;i<lstrlen(lpszURL);i++)
	{
		if( _T(':') == lpszURL[i] )
		{
			if(nPort)*nPort = _ttoi( &lpszURL[i+1] );
			lpszURL[i] = 0;
			break;
		}
	}
	if(lpszHost)lstrcpy( lpszHost,&lpszURL[nSize] );

	return urltype;
}


给楼主参考一下我的代码,
注意:此代码不能分析url中所包含的帐号密码信息,
中能分析一般的url信息,如果 url中包含帐号密码,将默认放在主机名部分中,自己去解析帐号密码吧
2013-10-6 14:10
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
7
哥哥,我是Linux平台,能编译微软的API吗?
2013-10-6 14:16
0
雪    币: 69
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
http://www.xxxx.com:8080/……这类的url就不适用
2013-10-6 14:50
0
雪    币: 239
活跃值: (190)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
API?字符串不分大小 写比较,自己写个函数就最,还api
2013-10-6 19:10
0
雪    币: 350
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这尼玛好高深的技巧
每次看套哥的帖子都全身发热,精神大振,胜过修炼十年
2013-10-6 19:21
0
雪    币: 239
活跃值: (190)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
11
同感,太高深了
2013-10-6 19:37
0
雪    币: 239
活跃值: (190)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
12
我想知道linux高级么?
我经常干的事,就是把linux程序弄到win32下面,自感对linux还了解那么一点点
咋没有觉得有多高级呢
2013-10-6 19:38
0
雪    币: 239
活跃值: (190)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
13
size_t found = str.find_first_of("/\\");

咋看着这么别扭,谁能告诉我(/\\)是什么意思,懒得去翻msdn

居然是 “参考自百度” 的 “自创” 的 “小技巧” 的文章,不知道讲什么的。

再目测 ,以下格式 均不能解析
https://www.baidu.com/ (https或者其它协议)
HTTP://www.baidu.com (大小 写问题)
http://www.baidu.com(无结束标志)
http://www.baidu.com:80/ (端口)
http:\\ww.baidu.com\(斜杠反了)
2013-10-6 19:41
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
无法学习,只能膜拜
2013-10-6 19:59
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
15
看看我的URISCHEME 实现类吧。
2013-10-6 23:23
0
雪    币: 211
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
为啥都喜欢 printf 和 string 混用呢
2013-10-6 23:56
0
雪    币: 1042
活跃值: (495)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
\\ 好像是代表\
2013-10-7 13:32
0
游客
登录 | 注册 方可回帖
返回
//