代码之家  ›  专栏  ›  技术社区  ›  Alireza Noorali Pedro Gonzalez

如何检查网站是否被阻止或没有编程?

  •  1
  • Alireza Noorali Pedro Gonzalez  · 技术社区  · 7 年前

    我需要检查一个网站是否被ISP屏蔽,以便在我的android应用程序中做出正确的决定。
    我该怎么做?

    3 回复  |  直到 7 年前
        1
  •  1
  •   Stephen C    7 年前

    假设我们在讨论网站被屏蔽的典型方式 1个 ;也就是说,只需从您的设备中丢弃指向网站IP地址的数据包。

    无法将被ISP阻止的网站与许多其他内容区分开来,包括:

    • 网站被你设备上的某些东西阻止,
    • 访问被网站本身阻止,或
    • 该网站或该网站的主机或该网站的ISP或Internet的某个部分或您的ISP正在关闭…在各种意义上。

    这不是android的限制。这是“互联网”工作方式的固有特征。发送数据包。如果他们无法到达预定的目的地,就无法确定是什么导致了这种情况的发生。

    简而言之,你需要重新考虑你的应用程序的设计,这样它根本就不需要这样做。


    1-其他可能的方法可能是返回具有特定响应代码的HTTP响应、特定头或具有特定内容的响应体但这也不容易处理,因为不同的ISP会有不同的做法实际上,不可能区分这种ISP阻塞和其他代理阻塞或者在某些情况下是完全不能归因于阻塞的错误。

        2
  •  2
  •   Aarth Tandel    7 年前

    试试这个,如果你得到的回答是真的那是允许的,

    public boolean isSiteBlocked() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnected()) {
        try {
            URL url = new URL("http://www.google.com");
            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
            urlc.setConnectTimeout(3000);
            urlc.connect();
            if (urlc.getResponseCode() == 200) {
                return new Boolean(true);
            }
    // also check different code for down or the site is blocked, example
            if (urlc.getResponseCode() == 521) {
             // Web server of the site is down
                return new Boolean(false);
            }
        } catch (MalformedURLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    return false;
    }
    

    更新

    如果站点关闭或服务器关闭,则必须按照要求进行处理

        3
  •  -2
  •   f0f1    7 年前

    支票 this answer

    URL url = new URL("http://www.gmail.com");
    URLConnection connection = url.openConnection();
    
    connection.connect();
    
    InputStream is = connection.getInputStream();
    
    byte[] b = new byte[1024];
    if (is.available()> 1024) {
       // do something
    }
    

    未阻止的站点应包含1024个以上的字符它只包含“此网站被阻止…”