Android WebView:使用模拟器时无法通过 VPN 访问站点
Android WebView: cannot access site through VPN when using emulator
我正在 Eclipse 模拟器中测试一个通过 WebView 加载站点的应用程序。我的问题是只有当我连接到我工作的 VPN 时才能访问该站点,我可以从我的 PC 浏览器访问它,但不能从模拟器访问它。这是我的代码:
public class MainActivity extends Activity {
public WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_main);
myWebView = (WebView)this.findViewById(R.id.webView);
myWebView.getSettings().setLoadsImagesAutomatically(true);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.setWebViewClient(new CustomWebViewClient());
myWebView.loadUrl("https://xxx");
}
}
当我使用“http://google.com”进行测试时它工作正常,当我使用随机 https 站点时也是如此,但是当我尝试访问 VPN 站点时出现 "net::ERR_CONNECTION_TIMED_OUT" 错误。
我已经连接到 VPN,并且还检查了 <uses-permission android:name="android.permission.INTERNET" />
是否在清单中的 <application>
标记之前。我已经使用 Eclipse 模拟器和 BlueStacks App Player 进行了测试,在这两种情况下 运行 应用程序并在模拟器的浏览器中输入 URL,并且总是得到相同的结果。
是否存在Android 的模拟器对此类访问有任何限制吗?
在此先感谢,问候。
更新
如果我从模拟器的浏览器访问 IP 地址,我可以访问该站点,但是当我尝试使用 myWebView.loadUrl
加载它时出现相同的错误
最后我想出了如何加载我的网站,我把 IP 地址和端口放在 "hosts" 文件中,而不是你可以看到的 URL。另外,我不得不覆盖我的 CustomWebViewClient 的 onReceivedSslError
方法,因为我在加载我的页面时遇到了认证错误:
@Override
public void onReceivedSslError(WebView view, android.webkit.SslErrorHandler handler, android.net.http.SslError error) {
handler.proceed();
};
现在 loadUrl 看起来像这样:
myWebView.loadUrl("https://IP:PORT/XXX");
希望对其他人有所帮助。
我正在 Eclipse 模拟器中测试一个通过 WebView 加载站点的应用程序。我的问题是只有当我连接到我工作的 VPN 时才能访问该站点,我可以从我的 PC 浏览器访问它,但不能从模拟器访问它。这是我的代码:
public class MainActivity extends Activity {
public WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_main);
myWebView = (WebView)this.findViewById(R.id.webView);
myWebView.getSettings().setLoadsImagesAutomatically(true);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.setWebViewClient(new CustomWebViewClient());
myWebView.loadUrl("https://xxx");
}
}
当我使用“http://google.com”进行测试时它工作正常,当我使用随机 https 站点时也是如此,但是当我尝试访问 VPN 站点时出现 "net::ERR_CONNECTION_TIMED_OUT" 错误。
我已经连接到 VPN,并且还检查了 <uses-permission android:name="android.permission.INTERNET" />
是否在清单中的 <application>
标记之前。我已经使用 Eclipse 模拟器和 BlueStacks App Player 进行了测试,在这两种情况下 运行 应用程序并在模拟器的浏览器中输入 URL,并且总是得到相同的结果。
是否存在Android 的模拟器对此类访问有任何限制吗?
在此先感谢,问候。
更新
如果我从模拟器的浏览器访问 IP 地址,我可以访问该站点,但是当我尝试使用 myWebView.loadUrl
加载它时出现相同的错误
最后我想出了如何加载我的网站,我把 IP 地址和端口放在 "hosts" 文件中,而不是你可以看到的 URL。另外,我不得不覆盖我的 CustomWebViewClient 的 onReceivedSslError
方法,因为我在加载我的页面时遇到了认证错误:
@Override
public void onReceivedSslError(WebView view, android.webkit.SslErrorHandler handler, android.net.http.SslError error) {
handler.proceed();
};
现在 loadUrl 看起来像这样:
myWebView.loadUrl("https://IP:PORT/XXX");
希望对其他人有所帮助。