我需要检查网站是否被ISP阻止,才能在我的android应用中做出正确的决定。
我该怎么办?
答案 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阻止的网站与许多其他情况区分开,包括:
这不是Android的限制。它是“互联网”工作方式所固有的。数据包已发送。如果他们无法到达预期的目的地,则无法完全确定是什么原因导致了这种情况。
简而言之,您需要重新考虑应用程序的设计,以便根本不需要这样做。
1-其他可能的方式可能是返回具有特定响应代码,特定标头或具有特定内容的响应正文的HTTP响应。但这也不是很容易处理,因为不同的ISP会以不同的方式来做。确实,无法将这种ISP阻止与其他代理的阻止区分开来……或者在某些情况下,根本无法归因于阻止的错误。
答案 2 :(得分:-2)
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个字符。它仅包含“此网站已被...屏蔽”