在android sdk中的Facebook个人资料图片上使用getInputStream()时,Openssl握手失败



我正在尝试为我的应用程序创建用户配置文件页面。我成功地连接到了Facebook,所以我有了使用userProfile = Profile.getCurrentProfile();的用户基本配置文件现在我正在尝试创建一个可绘制的用户配置文件图片,以放置在图像视图中。为此,我创建了一个输入流来获取图像(在asyncTask上运行)

            Bitmap x;
            url =  new URL("https://graph.facebook.com/939344862743414/picture?height=200&width=200");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestProperty("User-agent","Mozilla/4.0");
            connection.setConnectTimeout(100000);
            connection.connect();
            BufferedInputStream buf = new BufferedInputStream(connection.getInputStream());
            x = BitmapFactory.decodeStream(buf);

然而,无论我做什么,应用程序都会在到达连接.getInputStream()时失败并崩溃。错误为javax.net.ssl.SSLProtocolException:ssl握手中止我在网上找不到任何帮助。这似乎不是授权问题,因为我可以连接到Facebook并获取数据。我做错了什么?

问题由url创建。由于URL包含https,这意味着web服务器证书由知名CA颁发,因此您可以进行安全请求。由于您使用的是HttpURLConnection,因此它不支持安全URL。

因此,您可以使用URLConnection代替HttpURLConnection来启用对安全url(https://..)的访问。因此修改以下行:

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

这个:

URLConnection connection = (URLConnection) url.openConnection();

详细信息可在此处找到。

最新更新