.Net URL有效性检测问题:302跳转导致检测失败如何解决?
解决URL检测中302重定向导致的判定失败问题
你的代码检测tentworld.com.au时失败,核心原因是默认的HttpWebRequest请求缺少浏览器标识(User-Agent),部分站点会拦截这类请求,导致重定向过程异常;另外原代码没有显式处理重定向后的状态码验证。
以下是修改后的代码,可解决这类问题:
Private Function fCheckUrlIsOK(strURL As String) As Boolean strURL = strURL.Trim.ToLower ' 补全HTTP/HTTPS前缀 If Not (strURL.StartsWith("http://") Or strURL.StartsWith("https://")) Then strURL = "http://" & strURL End If Try Dim request1 As HttpWebRequest = WebRequest.CreateHttp(strURL) With request1 .Timeout = 10000 ' 10秒超时 .AllowAutoRedirect = True ' 显式开启自动重定向 .MaximumAutomaticRedirections = 5 ' 设置最大重定向次数,避免无限循环 .UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" ' 模拟Chrome浏览器请求头 End With ' 使用Using自动释放响应资源 Using response1 As HttpWebResponse = DirectCast(request1.GetResponse(), HttpWebResponse) ' 检查最终响应状态码是否为成功(2xx范围) Return response1.StatusCode >= HttpStatusCode.OK AndAlso response1.StatusCode < HttpStatusCode.Ambiguous End Using Catch ex As Exception ' 可保留异常记录逻辑 ' fErrorRecord(ex) Return False End Try End Function
关键修改说明:
- 显式管理重定向:明确开启
AllowAutoRedirect并设置最大重定向次数,既保证自动跟随跳转,又避免陷入无限循环。 - 添加浏览器标识:模拟主流浏览器的
User-Agent请求头,绕过站点的反拦截机制,这是解决tentworld.com.au检测失败的核心。 - 验证最终响应状态:不再仅依赖请求不抛异常,而是明确检查最终响应的状态码是否处于2xx成功范围,确保URL确实可正常访问。
- 自动释放资源:用
Using语句包裹响应对象,请求完成后自动释放资源,避免内存泄漏。
内容的提问来源于stack exchange,提问作者user1946932
相关产品推荐
相关产品推荐

