gpt4 book ai didi

android - 在 Android 应用程序中从 http 转换为 https 后出现 SocketTimeoutException

转载 作者:行者123 更新时间:2023-11-30 04:07:51 25 4
gpt4 key购买 nike

尝试将我的 Android 应用程序转换为使用 SSL 在我的 Android 应用程序和 Web 服务器之间传输信息后,我遇到了一些问题。 (SocketTimeOutException)

我已经从证书颁发机构 (CA) 购买了一个积极的 SSL 证书,并配置了我的服务器以正确使用它。我已经在我的网络浏览器中对其进行了测试,它可以正常工作。

现在我正在尝试修改我的 android 应用程序以使用 https 而不是 http 但由于这是我第一次自己使用 https,我对需要在 java 代码中实现哪些步骤感到有些困惑。

目前我正在我的设置页面上工作,我在其中配置我的应用程序以使用正确的 url。例如,我在一个 Activity 中有 2 个文本字段,我在其中输入网站 url (http://www.mydomain.com) 和存储相关页面的应用程序文件夹 (myappfolder)

然后我使用以下代码连接并测试连接变量是否配置正确,其中 validateurl.aspx 是一个网页,如果该网页存在则返回 JSON 字符串:

protected boolean validateConnectionSettings() {        

String result = "";
boolean validated = false;
try {
StringBuilder urlBuilder = new StringBuilder();
urlBuilder.append(tvWebsiteURLValue.getText() + File.separator + tvApplicationMiddlewareValue.getText() + File.separator + "validateurl.aspx");
URL url = new URL(urlBuilder.toString());
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();

URLConnection urlConn = url.openConnection();
BufferedReader in = new BufferedReader( new InputStreamReader(urlConn.getInputStream()));

String inputLine;
while((inputLine = in.readLine()) != null){
result += inputLine;
}
in.close();

if(result.equals("exists")) {
validated = true;
}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, e.getMessage());
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, e.getMessage());
}

return validated;
}

现在,当我尝试将 (http://www.mydomain.com) 变量转换为使用 https 时,我得到了上面提到的 java.net.SocketTimeoutException。

我用谷歌搜索了这个问题,发现我应该在上面的代码中实现 HttpsURLConnection 而不是 URLConnection,所以我已经相应地修改了我的代码如下:

    protected boolean validateConnectionSettings() {        

String result = "";
boolean validated = false;
try {
StringBuilder urlBuilder = new StringBuilder();
urlBuilder.append(tvWebsiteURLValue.getText() + File.separator + tvApplicationMiddlewareValue.getText() + File.separator + "validateurl.aspx");
URL url = new URL(urlBuilder.toString());
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();

// URLConnection urlConn = url.openConnection();
HttpsURLConnection urlConn = (HttpsURLConnection)url.openConnection();
BufferedReader in = new BufferedReader( new InputStreamReader(urlConn.getInputStream()));

String inputLine;
while((inputLine = in.readLine()) != null){
result += inputLine;
}
in.close();

if(result.equals("exists")) {
validated = true;
}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, e.getMessage());
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, e.getMessage());
}

return validated;
}

但是我仍然收到 java.net.SocketTimeoutException。有什么想法我做错了吗?

最佳答案

好的,我找到了导致 SocketTimeOutException 的问题。

问题似乎是我在家工作,而手机使用的网络与服务器所在的网络相同。在这种情况下,它似乎无法使用 https 访问服务器。我关闭了手机无线网络并使用手机 3G 连接进行连接,嘿嘿,应用程序已连接并验证了我的 URL。

我在网络浏览器中直接从服务器和我的工作笔记本电脑测试 https 连接时遇到了类似的问题。在每种情况下,我都通过将 www.mydomain.com 地址添加到主机文件中来解决问题。

我现在要研究编辑我的 android 手机主机文件,看看这是否会解决它,因为我不想使用手机 G3 连接进行测试,因为我预计我会收到很多费用...

稍后我会在下面发表评论,说说进展如何

希望对遇到类似问题的 friend 有所帮助

关于android - 在 Android 应用程序中从 http 转换为 https 后出现 SocketTimeoutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11341928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com