关于universal-image-loader的Https请求设置Cookie问题解决方案。

站在巨人肩膀上成长,废话不多少,首先感谢

http://article.fynas.com/universal-imageloader%E5%8A%A0%E8%BD%BD%E7%94%A8%E6%88%B7%E7%A7%81%E6%9C%89%E5%9B%BE%E7%89%87

作者的思路。

最开始配置并没有成功,因为对Cookie的属性并不是很了解。在cookie的String拼接上出了问题。

已订正;希望给遇到的童鞋一些帮助!

public class AuthImageDownloader extends BaseImageDownloader {
    private static final int MAX_REDIRECT_COUNT = 5;


    public AuthImageDownloader(Context context) {
        super(context);
    }


    public AuthImageDownloader(Context context, int connectTimeout,
                               int readTimeout) {
        super(context, connectTimeout, readTimeout);
    }


    protected InputStream getStreamFromNetwork(String imageUri, Object extra)
            throws IOException {
        HttpURLConnection conn = connectTo(imageUri);


        int redirectCount = 0;
        while (conn.getResponseCode() / 100 == 3
                && redirectCount < MAX_REDIRECT_COUNT) {
            conn = connectTo(conn.getHeaderField("Location"));
            redirectCount++;
        }


        return new BufferedInputStream(conn.getInputStream(), BUFFER_SIZE);
    }


    /**
     * 获取带有用户验证信息的HttpURLConnection
     *
     * @param url
     * @return
     * @throws IOException
     */
    private HttpURLConnection connectTo(String url) throws IOException {
        String encodedUrl = Uri.encode(url, ALLOWED_URI_CHARS);
        HttpURLConnection conn = (HttpURLConnection) new URL(encodedUrl)
                .openConnection();
        //这句话为urlconnection加入身份验证信息
        String sId = "";
        List cookies = new PersistentCookieStore(
                StarfishApplication.getInstance()).getCookies();
        for (Cookie cookie : cookies) {
            if (cookie.getName().equals("session_id")) {
                sId = cookie.getValue();
            }
        }
        conn.setRequestProperty("Cookie",
                "session_id=" + sId);
        conn.setConnectTimeout(connectTimeout);
        conn.setReadTimeout(readTimeout);
        conn.connect();
        return conn;

    }
}

不过我们项目测试虽然可以用,但是还是有bug。

你可能感兴趣的:(安卓源代码)