gpt4 book ai didi

java - Android/Java -- 如何创建HTTPS连接?

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:52 25 4
gpt4 key购买 nike

我这里有代码可以让我连接到 https 服务器并传输数据。它工作得很好,但我想知道我是否以正确的方式进行操作,并且我实际上正在建立安全连接。请检查我的工作。谢谢。

public class HTTPSClient extends DefaultHttpClient
{

public HTTPSClient()
{
}

@Override
protected ClientConnectionManager createClientConnectionManager()
{
SchemeRegistry registry = new SchemeRegistry();

HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER;
final SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
//socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", socketFactory, 80));
registry.register(new Scheme("https", socketFactory, 443));
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);

HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, "UTF-8");

return new SingleClientConnManager(params, registry);
}
}

我这样使用这段代码:

HttpResponse response = mConnection.httpsClient.execute(new HttpHost("www.somehostname.com", 80), new HttpGet("https://someaddress")));

然后我从那里阅读了回复。再次感谢。

最佳答案

看官方Custom SSL context来自 Apache HttpClient 的教程。

正如 Stephen C 提到的,您不需要为 https 上下文注册端口 80。而不是为 http 注册它(如果有必要的话)。这意味着,当您调用 https url 时,将使用您指定的适当的 socketFactory。

注意:在大多数情况下,当您从 Android 设备连接到具有自定义证书或来自不太知名的颁发者的证书的站点时,您将收到“证书不受信任”或类似的异常。如果是这种情况,您需要为您的应用程序创建一个自定义证书存储,以便它信任您的服务器证书。想知道hot实现这个的可以看看我的blog article

如果您想检查您的设备是否真的通过安全连接进行通信,您可以从您的 Android 模拟器调用 https 端点并使用 Wireshark 捕获流量。在你的开发机器上。

希望对你有帮助

关于java - Android/Java -- 如何创建HTTPS连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5485415/

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