【问题标题】:C# Check url exist?C# 检查 url 是否存在?
【发布时间】:2023-04-28 19:12:01
【问题描述】:

如何检查给定 URL 处是否存在页面?

我有这个代码:

private void check(string path)
    {

        try
        {
            Uri uri = new Uri(path);
            WebRequest request = WebRequest.Create(uri);
            request.Timeout = 3000;
            WebResponse response;
            response = request.GetResponse();

        }
        catch(Exception loi) { MessageBox.Show(loi.Message); }

    }

但这给出了关于代理的错误消息。 :(

【问题讨论】:

  • 看看这个问题*.com/questions/924679/…
  • 关于代理的什么错误信息?
  • 显然这是一个他不能告诉我们的秘密错误信息。

标签: c#


【解决方案1】:

首先,您需要了解您的问题至少有两个方面, 您必须首先检查服务器是否响应,例如使用 ping - 这是第一次检查,在执行此操作时,请考虑超时,对于哪个超时,您会认为页面不存在?

其次,尝试使用谷歌上可用的许多方法检索页面,再次,您需要考虑超时,如果服务器需要很长时间重播,页面可能仍然“存在”但服务器只是在吨压力。

【讨论】:

    【解决方案2】:

    如果代理需要使用您的 Windows 凭据对您进行身份验证(例如,您在公司网络中),请使用:

    WebRequest request=WebRequest.Create(url);
    request.UseDefaultCredentials=true;
    request.Proxy.Credentials=request.Credentials;
    

    【讨论】:

      【解决方案3】:
      try
      {
          Uri uri = new Uri(path);
          HttpWebRequest request = HttpWebRequest.Create(uri);
          request.Timeout = 3000;
          HttpWebResponse response;
          response = request.GetResponse();
          if (response.StatusCode.Equals(200))
          {
              // great - something is there
          }
      }
      catch (Exception loi) 
      { 
          MessageBox.Show(loi.Message); 
      }
      

      您可以检查内容类型和长度,请参阅MSDN HTTPWebResponse

      【讨论】:

      • 我最好像下面这样格式化我的条件而不是你提供的,我知道 200 是一回事,但我需要使用 StatusCode 对象比较它,以便 equals 按预期工作: response.StatusCode.Equals(response.StatusCode.Equals(HttpStatusCode.OK))
      【解决方案4】:

      猜测一下,在不知道具体错误消息或路径的情况下,您可以尝试将 WebRequest 转换为 HttpWebRequest,然后设置 WebProxy。

      MSDN: HttpWebRequest - Proxy Property

      【讨论】: