如何检查网站是否被程序阻止?

时间:2018-07-23 05:55:46

标签: java android

我需要检查网站是否被ISP阻止,才能在我的android应用中做出正确的决定。
我该怎么办?

3 个答案:

答案 0 :(得分:2)

尝试此操作,如果您得到的答复是真实的,则允许这样做,

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;
}

更新

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

答案 1 :(得分:1)

让我们假设我们正在谈论的是网站被阻止的典型方式 1 ;也就是说,只需从设备中丢弃发往该网站IP地址的数据包即可。

无法将您的ISP阻止的网站与许多其他情况区分开,包括:

  • 该网站被您的设备上的某个内容阻止
  • 网站本身已阻止访问,或者
  • 网站或网站的主机或网站的ISP或互联网的某些部分或您的ISP处于关闭状态...

这不是Android的限制。它是“互联网”工作方式所固有的。数据包已发送。如果他们无法到达预期的目的地,则无法完全确定是什么原因导致了这种情况。

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


1-其他可能的方式可能是返回具有特定响应代码,特定标头或具有特定内容的响应正文的HTTP响应。但这也不是很容易处理,因为不同的ISP会以不同的方式来做。确实,无法将这种ISP阻止与其他代理的阻止区分开来……或者在某些情况下,根本无法归因于阻止的错误。

答案 2 :(得分:-2)

选中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个字符。它仅包含“此网站已被...屏蔽”