用c语言判断网址怎么做呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用c语言判断网址怎么做呢?相关的知识,希望对你有一定的参考价值。

/*
问题地址:http://zhidao.baidu.com/question/317437658.html

详解:
标准的网址(URL)格式是这样的:
http://user:pass@myserver:port/myapp1/myapp2/index.html?key1=value2&key2=value2#anchor
其中:
[1] http 是协议类型,同样的还有 ftp 等。【可省略,一般浏览器默认都是 http】
[2] user 是用户名,pass 是密码。【可省略】
[3] myserver 可以是服务器的 ip 或者域名,
如百度的 ip = 220.181.112.143 , 域名是:www.baidu.com
【这个不能省略】
[4] port 是端口。【可省略,一般默认都是 80】
[5] myapp1,myapp2 是应用程序目录。【可省略】
index.html 是当前页面【可省略,默认是 index.html,default.html 等】
[6] key1,value1,key2,value2 是传递给网站的参数,【可省略】
[7] anchor 是网页内的锚点

合法的网址举例:
www.baidu.com
http://__anglfish:123@www.baidu.com:80/
http://zhidao.baidu.com/question/311110938.html?an=0&si=1

判断网址算法:
最简单的当然是正则表达式了。
我们看到标准网址(URL)的 7 个部分,有 6 个分割符号,分别是:
://
@
:
/
?
#
在浏览器里面,只有第 3 部分是必须填写的,也是我们日常写的最多的。

用到的资源文件:
头文件 deelx.h,可以到:http://www.regexlab.com/zh/deelx/下载
下载后放到和源程序同一个目录下即可。
*/

#include <stdio.h>
#include "deelx.h"

int main(int argc, char * argv[])

char text[1000] = "http://user:pass@myserver.com:800/myapp1/myapp2/index.html?key1=value1&key2=value2#anchor";
// 判断合法网址的正则表达式
static CRegexpT <char> regexp
(
"(([:alpha:]+)\\://)?((\\w+)\\:(\\w+)@)?(\\w+(\\.\\w+)*)(\\:(\\d+))?((/\\w+)*(\\.\\w+)?)?(\\?((\\w+=\\w+&)*(\\w+=\\w+)))?(#((\\w+)))?)"
);
int i;

printf("输入一个网址:");
while(scanf("%s",text))

MatchResult result = regexp.Match(text);
if ( result.IsMatched() )

/*
for(i=0;i<result.MaxGroupNumber();i++)

printf("%d=%.*s\n", i,result.GetGroupEnd(i) - result.GetGroupStart(i), text + result.GetGroupStart(i));

*/

// 解析网址
printf("网址:%.*s\n", result.GetGroupEnd(0) - result.GetGroupStart(0), text + result.GetGroupStart(0));
printf("协议类型:%.*s\n",result.GetGroupEnd(2) - result.GetGroupStart(2), text + result.GetGroupStart(2));
printf("用户名:%.*s\n",result.GetGroupEnd(4) - result.GetGroupStart(4), text + result.GetGroupStart(4));
printf("用户密码:%.*s\n",result.GetGroupEnd(5) - result.GetGroupStart(5), text + result.GetGroupStart(5));
printf("服务器IP或域名:%.*s\n",result.GetGroupEnd(6) - result.GetGroupStart(6), text + result.GetGroupStart(6));
printf("服务器端口:%.*s\n",result.GetGroupEnd(9) - result.GetGroupStart(9), text + result.GetGroupStart(9));
printf("应用程序目录:%.*s\n",result.GetGroupEnd(10) - result.GetGroupStart(10), text + result.GetGroupStart(10));
printf("查询参数:%.*s\n",result.GetGroupEnd(14) - result.GetGroupStart(14), text + result.GetGroupStart(14));
printf("锚:%.*s\n\n",result.GetGroupEnd(18) - result.GetGroupStart(18), text + result.GetGroupStart(18));


else

printf("\"%s\" 是一个非法的网址!!!\n",text);

printf("输入一个网址:");


return 0;


/*
运行结果:

输入一个网址:http://user:pass@myserver.com:800/myapp1/myapp2/index.html?key1=value1&key2=value2#anchor
网址:http://user:pass@myserver.com:800/myapp1/myapp2/index.html?key1=value1&key2=value2#anchor
协议类型:http
用户名:user
用户密码:pass
服务器IP或域名:myserver.com
服务器端口:800
应用程序目录:/myapp1/myapp2/index.html
查询参数:key1=value1&key2=value2
锚:anchor
*/
参考技术A compare()函数比较字符串的前几个字符是否是http追问

是的 跟http://www.baidu.com/一样

追答

不明白你的意思。

已知IP和端口,用c语言怎么判断能不能连接网络

已知IP和端口,用c语言怎么判断能不能连接网络,能连接网络,把数据发送给服务器。若不能连接网络,就把从客户端接收到的数据存到自己用c语言创建的文件中,等有网络后,再把缓存文件中的数据发送给服务器(JSON形式发送)

持续建立tcp连接
建立成功就是和服务器连上了
不成功就等于是无网络
建立成功后,保持一个心跳连接确定网络通畅就好
参考技术A 在什么操作系统平台下的程序?一般不自己写,可以调用系统API,就是说有现成的函数给你调用追问

Linux
要自己写逻辑,TCP链接可以做判断吗?

追答

嵌入式Linux吗?以前接触过一点,但没做过项目,网上找找例子看看吧,你的问题是里面的实现细节,抱歉回答不了了。完整的linux系统和windows差不多,应该有现成的API

以上是关于用c语言判断网址怎么做呢?的主要内容,如果未能解决你的问题,请参考以下文章

怎么用JS获取当前URL完整地址,然后判断这地址是不是包含有.php或.asp的字符,如果有,则跳转到另一个网址

html 里怎么样设置相对路径?为啥代码没错,传上就显示不出来了,该怎么做呢?说明白点,谢谢

C语言中如何将自己常用的函数封装到编译器的库函数中具体应该怎么做呢?

怎么读取DataTable某一列的值?然后用c#代码判断是不是有重复数据?linq还是怎么做呢?

c语言实现用户指令实现 用户输入字符串 然后根据要求执行 怎么做呢

如何创建标签网址