如何对网页链接是否有效进行判断?
请提问者看完一下的内容在进行解答,十分感谢。
最近在忙一个针对指定网址的源代码进行源代码抓取的操作,主要遇到两个问题。1、对指定的网页链接如何判断他是否有效,例如一些链接点开时浏览器会提示“404”的错误。
2、将网页的源文件以txt文本文档的形式保存下来,我想文件名使用网页的网址,但是对于网址中许多的“/”如何处理,听一些人说使用转义字符是可以的。但是主要有两个问题:首先就是我手动的给文件重命名貌似使用转义字符或是“/”都不行。再者链接上的“/”这么多,如果使用写成方法将对每一个“/”进行转义的话,我想会很麻烦。不知道有没有其他简便的方法。
求教MFC高手指导。
[解决办法]
1、使用"HEAD"方式发送请求,检查URL是否有效
2、“/”是非法的文件命名符号,可以通过转意替换来解决,因为非法的文件名命名符号还不止“/”这一个,比如“?”什么的,那些符号在URL中都是合法的,所以你可能需要制定一个复杂的转意规则,才能部分搞定,对于那些超长的URL,你没有办法这样搞定的:)
[解决办法]
逻辑:通过HTTP建立连接,判断返回值
代码:使用到 ::InternetConnect 即可。
::InternetOpen //初始化网络句柄 ::InternetSetStatusCallback //设置下载状态回调函数 ::InternetConnect //建立网络连接 HttpOpenRequest //请求数据 ::InternetReadFile //循环读取下载数据
[解决办法]
CHttpFile::QueryInfoStatusCode
Status code
Meaning
200
URL located, transmission follows
400
Unintelligible request
404
Requested URL not found
405
Server does not support requested method
500
Unknown server error
503
Server capacity reached
[解决办法]
CString URL2FileName(LPCSTR pszURL){ CString strFileName(pszURL); strFileName.Replace(_T("%"),_T("\a")); strFileName.Replace(_T("<"),_T("%0")); strFileName.Replace(_T(">"),_T("%1")); strFileName.Replace(_T("?"),_T("%2")); strFileName.Replace(_T(":"),_T("%3")); strFileName.Replace(_T("|"),_T("%4")); strFileName.Replace(_T("*"),_T("%5")); strFileName.Replace(_T("/"),_T("%6")); strFileName.Replace(_T("\""),_T("%7")); strFileName.Replace(_T("\\"),_T("%8")); strFileName.Replace(_T("\a"),_T("%9")); return strFileName;}CString FileName2URL(LPCSTR pszFileName){ CString strURL(pszFileName); strURL.Replace(_T("%0"),_T("<")); strURL.Replace(_T("%1"),_T(">")); strURL.Replace(_T("%2"),_T("?")); strURL.Replace(_T("%3"),_T(":")); strURL.Replace(_T("%4"),_T("|")); strURL.Replace(_T("%5"),_T("*")); strURL.Replace(_T("%6"),_T("/")); strURL.Replace(_T("%7"),_T("\"")); strURL.Replace(_T("%8"),_T("\\")); strURL.Replace(_T("%9"),_T("%")); return strURL;}