我需要可靠地检测设备是否具有完整的互联网访问权限,即用户没有受限于强制门户(也称为围墙花园),即一个限制性子网,迫使用户在表单中提交其凭据以获得完全访问权限。
我的应用程序正在自动化身份验证过程,因此在开始登录活动之前知道完整的互联网访问权限是否可用非常重要。
问题不是如何检查网络接口是否已启动并处于连接状态。而是要确保设备具有无限制的互联网访问权限,而不是沙盒化的局域网段。
到目前为止,我尝试的所有方法都失败了,因为连接到任何众所周知的主机都不会抛出异常,而是返回有效的HTTP 200
响应代码,因为所有请求都被路由到登录页面。
以下是我尝试的所有方法,但它们都返回true
而不是false
,原因如上所述:
1:
InetAddress.getByName(host).isReachable(TIMEOUT_IN_MILLISECONDS);
isConnected = true; <exception not thrown>
2:
Socket socket = new Socket();
SocketAddress sockaddr = new InetSocketAddress(InetAddress.getByName(host), 80);
socket.connect(sockaddr, pingTimeout);
isConnected = socket.isConnected();
URL url = new URL(hostUrl));
URLConnection urlConn = url.openConnection();
HttpURLConnection httpConn = (HttpURLConnection) urlConn;
httpConn.setAllowUserInteraction(false);
httpConn.setRequestMethod("GET");
httpConn.connect();
responseCode = httpConn.getResponseCode();
isConnected = responseCode == HttpURLConnection.HTTP_OK;
那么,我如何确保我连接到的是实际的主机而不是登录重定向页面?显然,我可以检查我使用的“ping”主机的实际响应正文,但这似乎不是一个适当的解决方案。
?time=1234
)。 - hall.stephenk