检查 URL 是否存在 - HTTP 请求总是返回异常

2024-03-20

有很多关于如何检查 URL 是否有效的帖子。它们都具有基本相同的代码,这似乎适用于每个人 - 但不适合我,我不明白为什么。

    public static bool ifURLexists(string url) 
    {

         try 
         {
              var request = WebRequest.Create(url) as HttpWebRequest;
              request.Method = "HEAD";
              //response ALWAYS throws an exception
              using (var response = (HttpWebResponse)request.GetResponse()) 
              {
                return response.StatusCode == HttpStatusCode.OK;
              }
         }
         catch 
         {
            return false;
         }
    }

我已经使用诸如“http://www.nonexistingwebsiteblabla.com http://www.nonexistingwebsiteblabla.com" and "http://www.google.com http://www.google.com”。无论我插入现有的还是不存在的 URL,我都会在这一行得到一个 WebException:

    using (var response = (HttpWebResponse)request.GetResponse())

为什么它不能工作?


检查状态 WebException.Status这会让您知道发生了什么特定的网络异常。

更新:尝试更改request.Method = "HEAD"; to GET并尝试。

尝试使用不可用 (404) url,比较状态. 检查是否有任何东西阻止了您的请求。

这就是我在代码中进行管理的方式,我仅使用 ftp 特定状态进行处理。“CommStatus”是一个带有错误代码的 ENUM,可在整个应用程序中使用。

catch (WebException ex)
        {
            FtpWebResponse response = (FtpWebResponse)ex.Response;               
          switch(response.StatusCode)
            {
                case FtpStatusCode.ActionNotTakenFileUnavailable:
                    return CommStatus.PathNotFound; 
                case FtpStatusCode.NotLoggedIn:
                    return CommStatus.AuthenticationError;
                default: return CommStatus.UnhandledException;

            }


        }

以下是 WebException 的可用状态。

未找到缓存条目
此 API 支持产品基础架构,并不适合直接从您的代码中使用。未找到指定的缓存条目。

连接失败
此 API 支持产品基础架构,并不适合直接从您的代码中使用。无法在传输级别联系远程服务点。

连接关闭
此 API 支持产品基础架构,并不适合直接从您的代码中使用。连接过早关闭。

保活失败
此 API 支持产品基础架构,并不适合直接从您的代码中使用。指定 Keep-alive 标头的请求的连接意外关闭。

超出消息长度限制
此 API 支持产品基础架构,并不适合直接从您的代码中使用。发送请求或从服务器接收响应时收到的消息超出了指定的限制。

名称解析失败
此 API 支持产品基础架构,并不适合直接从您的代码中使用。名称解析程序服务无法解析主机名。

Pending此 API 支持产品基础架构,并不适合直接从您的代码中使用。内部异步请求正在等待处理。

管道故障此 API 支持产品基础架构,并不适合直接从您的代码中使用。该请求是管道请求,并且在收到响应之前连接已关闭。

协议错误
此 API 支持产品基础架构,并不适合直接从您的代码中使用。从服务器收到的响应已完成,但指示协议级错误。例如,诸如 401 访问被拒绝之类的 HTTP 协议错误将使用此状态。

代理名称解析失败
此 API 支持产品基础架构,并不适合直接从您的代码中使用。名称解析程序服务无法解析代理主机名。

接收失败
此 API 支持产品基础架构,并不适合直接从您的代码中使用。未从远程服务器收到完整响应。

请求已取消此 API 支持产品基础架构,并不适合直接从您的代码中使用。请求已取消、调用了 WebRequest.Abort 方法或发生了不可分类的错误。这是状态的默认值。

通过缓存策略禁止请求
此 API 支持产品基础架构,并不适合直接从您的代码中使用。缓存策略不允许该请求。一般来说,当请求不可缓存并且有效策略禁止向服务器发送请求时,就会发生这种情况。如果请求方法暗示存在请求正文、请求方法需要与服务器直接交互或请求包含条件标头,您可能会收到此状态。

代理请求禁止
此 API 支持产品基础架构,并不适合直接从您的代码中使用。代理不允许此请求。

安全通道故障
此 API 支持产品基础架构,并不适合直接从您的代码中使用。使用 SSL 建立连接时出错。

发送失败此 API 支持产品基础架构,并不适合直接从您的代码中使用。无法将完整的请求发送到远程服务器。

服务器协议违规此 API 支持产品基础架构,并不适合直接从您的代码中使用。服务器响应不是有效的 HTTP 响应。

Success此 API 支持产品基础架构,并不适合直接从您的代码中使用。没有遇到错误。

Timeout此 API 支持产品基础架构,并不适合直接从您的代码中使用。在请求超时期间未收到任何响应。

信任失败
此 API 支持产品基础架构,并不适合直接从您的代码中使用。无法验证服务器证书。

未知错误
此 API 支持产品基础架构,并不适合直接从您的代码中使用。发生未知类型的异常。

更多详细信息请参见此处:https://msdn.microsoft.com/en-us/library/system.net.webexceptionstatus(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/system.net.webexceptionstatus(v=vs.110).aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查 URL 是否存在 - HTTP 请求总是返回异常 的相关文章

随机推荐

  • java读取远程文件需要用户名和密码

    我正在尝试用java读取远程文件 File f new File 192 168 1 120 home hustler file txt 远程计算机需要用户名和密码才能访问该文件 有没有办法可以通过java代码传递参数并读取文件 packa
  • 启用/禁用时的 JTextField 背景颜色

    当它被禁用时 我将 JTextField 的背景颜色更改为黑色 我这样做是使用UIManager以及我在应用程序启动时设置的这个属性 TextField disabledBackground 我想知道再次启用 JTextField 时如何更
  • 使用带有括号的 my 并且只有一个变量

    我有时会看到这样的 Perl 代码 my variable blah 在单个变量两边加上括号有什么意义 我认为括号仅在声明多个变量时使用 例如 my var1 var2 var3 blah 出现差异时有以下几种情况 When array在右
  • Javadoc 失败,找不到 java.lang.FunctionalInterface 的类文件

    我正在尝试使用 Android Studio 生成 Javadoc 在 Eclipse 下工作正常 但在 Android Studio 下出现错误 javadoc 错误 com sun tools doclets internal tool
  • 计算三级缓存的实际/有效CPI

    a 给定一个具有两级高速缓存 L1 和 L2 的内存系统 以下是规格 L1缓存命中时间 2个时钟周期 一级缓存命中率 92 L2 缓存的未命中惩罚 L2 的命中时间 8 个时钟周期 二级缓存命中率 86 主存丢失惩罚 37 个时钟周期 暂时
  • 带有加载指示器的 UISearchController

    我实施了UISearchController我正在从 js 回调获取数据 但是当我录入searchbar放入数据需要一些时间 所以我想知道如何实现加载indicator进入表查看结果UISearchController 用 Swift 3
  • javascript jquery 单选按钮单击

    我有 2 个单选按钮和 jquery 正在运行
  • 核心数据:-deleteObject:崩溃,删除规则是原因吗?

    我有以下模型 如图所示 替代文本http img521 imageshack us img521 9741 schermata20100224a12251 png http img521 imageshack us img521 9741
  • jQuery 自动完成:点击返回提交表单

    我正在使用 jQuery 自动完成插件 I m not sure if there s a better way to do this var base url window location href slice 0 window loc
  • Volley 不发送带参数的 post 请求。

    我有下面的代码 Google 的 Volley Library 来向我的 php 服务器发送 POST 请求并获取结果信息 我没有检查就尝试了代码isset POST id 在 php 中并且代码运行良好 当我开始检查时 php 将跳过 i
  • 选择放置在另一个元素之后但不是立即放置的第一个元素

    怎么可能选择仅第一个元素 例如 h2 在另一个元素 例如 h1 之后 但它是不一定立即放置在 因此 element element 例如 h1 h2 不起作用 因为它选择放置的元素立即地元素之后 h1 Title1 h1 lt many t
  • jQuery 验证触发错误消息

    我有一个有点奇怪的问题 我想在元素上触发 jquery 验证错误消息 即使它是有效的 设想 我有一个大表格 输入之一是 PersonalId 可以选择输入该 PersonalId 除了该输入之外 我还有一个普通按钮 不是提交按钮 如果您单击
  • 通过 Internet 发送对象

    我定义一个类 然后设置该类类型的一个对象 我想透明地将该对象发送到另一台计算机上运行的另一个 Java 应用程序 实现这一目标的最佳技术是什么 您需要首先研究 Java 的序列化可串行化 http java sun com javase 6
  • 使用nodejs中的直通流模块使用axios发送文件

    Imports const ffmpegPath require ffmpeg installer ffmpeg path const FfmpegCommand require fluent ffmpeg const fs require
  • React Django WebSocket 连接挑战

    我面临的挑战是尝试将 Django 后端与 React 前端应用程序连接起来 我收到的错误是 WebSocket connection to ws localhost 8000 ws week failed callee Week jsx
  • 在 powershell 中停止然后启动进程

    我想停止 终止某个进程 然后在完成我必须做的事情后再次启动它 这是我已经拥有的 Clear host processes Get Process devenv processes Count if processes Count gt 1
  • 如何将asp.net MVC详细视图数据导出到excel文件?

    如何将 ASP NET MVC 视图数据导出到 Excel 文件 实际上我的视图页面包含许多视图数据类型 我使用这些数据类型的每个循环来在视图页面上显示数据 我的要求是我想将显示的数据导出到Excel文件中 我该如何实现这一目标 Thank
  • FullCalendar - 提取显示的事件

    是否有可能发现 提取当前显示的来自 FullCalendar 对象的事件 参考 http arshaw com fullcalendar http arshaw com fullcalendar 理想情况下 我希望在日历旁边有一个事件的辅助
  • Java中String.length()的时间复杂度是多少?

    是 O n 还是 O 1 通过在字符串分配给对象期间将长度保存在私有变量中 如果是O n 是否意味着下面代码的复杂度是O n 2 for int i 0 i
  • 检查 URL 是否存在 - HTTP 请求总是返回异常

    有很多关于如何检查 URL 是否有效的帖子 它们都具有基本相同的代码 这似乎适用于每个人 但不适合我 我不明白为什么 public static bool ifURLexists string url try var request Web