使用Downloader.java代码我下载基本网址的代码

时间:2015-11-16 18:12:38

标签: java android pdf download certificate

基本上使用此代码:https://github.com/commonsguy/cw-omnibus/blob/master/Service/Downloader/src/com/commonsware/android/downloader/Downloader.java 和这个图书馆:https://github.com/commonsguy/cwac-security/releases 基于此:https://github.com/commonsguy/cwac-security/blob/master/TrustManagerBuilder.markdown 我的最终代码是:

package com.androidman.pc02.mywebviewapp;

import android.app.IntentService;
import android.content.Context;
import android.content.Intent;
import android.os.Environment;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;

import com.commonsware.cwac.security.trust.TrustManagerBuilder;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;

public class Downloader extends IntentService {
  public static final String ACTION_COMPLETE=
      "com.commonsware.android.downloader.action.COMPLETE";

  public Downloader() {
    super("Downloader");
  }

  @Override
  public void onHandleIntent(Intent i) {
      try {
          File root=
                  Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

          root.mkdirs();

          File output=new File(root, i.getData().getLastPathSegment());

          if (output.exists()) {
              output.delete();
          }

          //---
          HttpsURLConnection conn=null;
          Context mcontext= MySuperAppApplication.getContext();
          TrustManagerBuilder tmm=new TrustManagerBuilder(mcontext)
                  .allowCA("fdesmie.cer")
                  .or()
                  .useDefault();
          SSLContext ssl=SSLContext.getInstance("TLS");

          ssl.init(null, tmm.buildArray(), null);

          //conn=(HttpsURLConnection)new URL(mUri).openConnection();
          URL url=new URL(i.getData().toString());
          conn =
                  (HttpsURLConnection)url.openConnection();

          conn.setSSLSocketFactory(ssl.getSocketFactory());


          //HttpURLConnection c=(HttpURLConnection)url.openConnection();

          FileOutputStream fos=new FileOutputStream(output.getPath());
          BufferedOutputStream out=new BufferedOutputStream(fos);

          try {
              InputStream in=conn.getInputStream();
              byte[] buffer=new byte[8192];
              int len=0;

              while ((len=in.read(buffer)) >= 0) {
                  out.write(buffer, 0, len);
              }

              out.flush();
          }
          finally {
              fos.getFD().sync();
              out.close();
              conn.disconnect();
          }
          Log.d(getClass().getName(), "Exception in download") ;

          LocalBroadcastManager.getInstance(this)
                  .sendBroadcast(new Intent(ACTION_COMPLETE));
      }
      catch (IOException e2) {
          Log.e(getClass().getName(), "Exception in download", e2);
      } catch (CertificateException e) {
          e.printStackTrace();
      } catch (NoSuchAlgorithmException e) {
          e.printStackTrace();
      } catch (KeyStoreException e) {
          e.printStackTrace();
      } catch (KeyManagementException e) {
          e.printStackTrace();
      }
  }
}

当我点击https网站的链接时,下载的文件是网站基本网址的HTML内容。该站点使用不受信任(“NET :: ERR_CERT_AUTHORITY_INVALID”)证书。 有谁知道问题会是什么? 感谢

0 个答案:

没有答案