请教vb如何实现检测一个URL是否有效?
网站形式是任意的
比如http://www.xxxx.com/ssssss.html
或者http://xxx.xom/sss.asp
网站形式是任意的
比如http://www.xxxx.com/ssssss.html
或者http://xxx.xom/sss.asp
解决方案 »
- vb6 我想把窗体里面的所有控件同时移动(不移动窗体)
- 这段关于托盘程序的代码,我想请问:.uCallbackMessage = WM_MOUSEMOVE是起什么作用的,请详细解释一下.
- 2002年一位学VC的碰到了一个问题,3年来没有答案,2005年本人也碰到了这个问题,但一套VB开发的EASY EDITOR却解决了这个问题,但不知怎么解
- 我想打开一个mp3文件,用系统默认的播放器,不知到播放器的路径,用shell似乎不行。
- 隐藏表中数据和显示问题
- 求救,用DAO连接Sqlserver数据库的例子
- 用编程的方法注册OCX控件?
- 请问有什么控件可做容器,而且有下拉框
- 有没有人在VB中使用过rs.absolutepage属性?
- 如何修改“我的电脑”的图标?
- vba SaveAs 的 用法
- 如果电脑接了多个屏幕 vb6的窗体怎么才能知道自己在哪个屏幕? 又怎么知道当前屏幕的分辨率?
虽然还有一个更简单的函数InternetOpenUrl,但由于URL不存在时此函数会出现阻塞,故不推荐使用。
因为按标准的站点配置处理来说,如果他的网站没有那个文件或URL地址,WEB服务器会返回404或400或401等这些错误号在HTTP头,那么便可通过HTTP头的信息来识别那个URL是否有效。
但是有些WEB站点却对这一块作了特殊处理,比如没有哪个URL地址,他同样返回的是200,只是他的内容却是他自定义的错误提示页面或干脆直接转向到他网站的首页内容,所以要说能够笼统的对所有URL进行是否有效的判断是不可能的。
就标准的IIS6配置来说,如果要识别URL有效性,通过HTTP头就可以识别了,下面我举个例子。'以下是VB采用XMLHTTP对象访问远程URL,然后判断访问状态的一个范例
Private Sub Command1_Click()
Dim XMLObject As Object
Set XMLObject = CreateObject("Microsoft.XMLHTTP")
XMLObject.Open "GET", "http://www.xxxx.com/ssssss.html", False
XMLObject.send ""
If XMLObject.Status = 200 Then
MsgBox "网页存在。", 64, "提示"
Else
MsgBox "网页不存在。", 64, "提示"
End If
Set XMLObject = Nothing
End Sub当然,对于百度这种对错误页进行过处理的WEB站点来说是没有效果的,还必须作特别的处理,如:Private Sub Command1_Click()
Dim XMLObject As Object
Dim ReadText As String
Set XMLObject = CreateObject("Microsoft.XMLHTTP")
XMLObject.Open "GET", "http://www.baidu.com/jj.asp", False
XMLObject.send ""
If XMLObject.Status = 200 Then
ReadText = StrConv(XMLObject.responseBody, vbUnicode)
If InStr(1, ReadText, "<title>百度--您的访问出错了</title>", vbTextCompare) = 0 Then
MsgBox "网页存在。", 64, "提示"
Else
MsgBox "网页不存在。", 64, "提示"
End If
Else
MsgBox "网页不存在。", 64, "提示"
End If
Set XMLObject = Nothing
End Sub由上可以看出,百度即使没有jj.asp,但返回的HTTP头还是200,因为它返回的不是标准的错误页,而是他百度自己的错误页面。所以说,不同的网站有不同的处理方法,没有什么可通用的URL识别是否有效的方法,必须看情况而定。
以下是判断所有网站URL是否有效的一个我觉得比较好的思路,你可以参考看看:通过多次判断来进行识别,首先你故意访问那个站点不存在的URL地址,然后得到结果保存起来,然后再访问你要识别的URL,这样将前后进行对比,如果结果大致一样,说明你要判断的URL不存在,如果不同,那么就按存在处理,如:
你要判断的URL是:
http://www.xxx.com/web/a.asp
那么你先访问一个www.xxx.com肯定不存在的URL地址,如:
http://www.xxx.com/XXOOXXO/XXXOOOXXOO/XOXOXXO/XXXXXOOOOO/XXOO.asp
那么这个URL在通常情况下是不可能存在的,对方的WEB服务系统肯定会返回一个错误页
这时你将这个错误页内容保存,然后再访问你要判断的URL
http://www.xxx.com/web/a.asp
然后将两者对比,首先对比HTTP头的状态,如果这个一致,再对比HTTP的标题,如果这个也一致,那么估计你要识别的URL地址就不存在了,否则就按存在处理或在进行进一步的识别处理,如判断标题中是否包含“Error”或“错误”之类关键字等,这就看看你具体的过程了。按照这种方法,应该可以分析出不存在的URL来,但是万事没有绝对,就像上面我所说的,网络上这种非标的东西始终控制在别人手中,你很难进行预测或控制的。就比如说他每次返回的错误代码都不一样也很有可能。在以前我曾经在电脑报上看过这么一篇文章,就是教人如何做每次访问都有不同界面的网页,界面是随机更换的,而且风格可以完全不一样,主要是让人每次访问相同页面时有一种新鲜感,呵呵。按照这种思路,如果上面这种方法碰到了这种思路的站点,那结果就真的很难预测了,呵呵。
简单的判断3楼的方法不错
如果要精确些可以参考一下http协议中的响应代码
一般返回4xx(请求错误)与5xx(服务器错误)才表示在浏览器中打开时是错误页面
但3楼使用的方法可能会出现一个问题
XMLHTTP对3xx响应代码,好像无视
不知道是不是我以前使用异步方法的原因
具体可以测试一下Http://BBS.CSDN.NET
这个地址返回的是302转向至http://community.csdn.net/的
当时XMLHTTP的State属性一直是0,一般属性值为READY_STATE_COMPLETE时,才能对XMLHTTP中返回的信息进行读写..
后来是利用ServerXMLHTTP解决的,ServerXMLHTTP好像是可以自动重定向的
-----------------------
刚才又看了下3楼。
百度不存在页是返回的也应该是3xx,然后重定向至百度自定义页面的.那客户端应该会有信息呀
不知道XMLHTTP是怎么处理好的.- -! 也可能是Community.Csdn.Net响应信息不一样/也许是XMLHTTP的版本不同相应的处理方法也不一样.. 不深究了.不贴代码了.前些天封装了一个ServerXMLHTTP
可以参考一下...http://blog.csdn.net/SilenceNet/archive/2009/06/07/4249329.aspx
三楼的技巧很好
谢谢
不知道抓取html内容那部分的代码有没有牛人赐教
If InStr(1, ReadText, "<title>百度--您的访问出错了</title>", vbTextCompare) = 0 Then
建议你google搜索一下
方法显然不好,因为URL错误,回形成程序假死,没反应长达40秒