`
liushui1990
  • 浏览: 4635 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过Https登录并下载文件

    博客分类:
  • Java
阅读更多

通过Https登录并下载文件。

1.必须是https方式连接。

2.解决Basic认证,即登录框的用户名密码填写操作。

 

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.X509TrustManager;

/**
 * 通过Https登录并下载文件。<br>
 * 1.必须是https方式连接。<br>
 * 2.解决Basic认证,即登录框的用户名密码填写操作。
 * 
 * @author Concurrency 2012-12-19
 */
public class HttpsDownload {
	public static void main(String[] args) {
		// Https
		new HttpsDownload().downloadFile("https://where,is.it/download.zip", "D:/test/download.zip");
	}

	/**
	 * 
	 * @param httpsURL
	 *            httpsURL
	 * @param tempFile
	 *            temp file path
	 */
	private void downloadFile(String httpsURL, String tempFile) {
		HttpsURLConnection httpsCon = null;
		FileOutputStream fos = null;
		InputStream is = null;
		final int BUFFER_SIZE = 1024;
		try {
			// 为Basic认证加上用户名和密码并支持https
			Authenticator.setDefault(new AddBasicPasswordAndSSL());
			// 打开URL通道
			URL url = new URL(httpsURL);
			httpsCon = (HttpsURLConnection) url.openConnection();
			// 开始网络连接
			httpsCon.setConnectTimeout(2000);
			httpsCon.connect();
			// 读写的缓存
			byte[] buffer = new byte[BUFFER_SIZE];

			int size = 0;
			is = httpsCon.getInputStream();
			fos = new FileOutputStream(tempFile);
			// 开始读写文件
			while ((size = is.read(buffer)) != -1) {
				fos.write(buffer, 0, size);
				fos.flush();
			}
		} catch (Exception e) {
			//Exception handle
		} finally {
			close(is, fos, httpsCon);
		}
	}

	private void close(InputStream is, OutputStream os, HttpsURLConnection connection) {
		try {
			if (is != null) {
				is.close();
			}
			if (os != null) {
				os.close();
			}
			if (connection != null) {
				connection.disconnect();
			}
		} catch (Exception e) {
			// nanimosinai
		}

	}

	/**
	 * 通过继承Authenticator类为Basic认证加上用户名密码 . 另外用于支持HttpsURLConnection连接
	 * 
	 */
	private class AddBasicPasswordAndSSL extends Authenticator {
		private final String username = "Administrator";
		private final String password = "123456789";

		AddBasicPasswordAndSSL() throws KeyManagementException, NoSuchAlgorithmException {
			MyX509TrustManager xtm = new MyX509TrustManager();
			MyHostnameVerifier hnv = new MyHostnameVerifier();
			SSLContext sslContext = null;
			sslContext = SSLContext.getInstance("TLS"); // 或SSL
			X509TrustManager[] xtmArray = new X509TrustManager[] { xtm };
			sslContext.init(null, xtmArray, new java.security.SecureRandom());

			if (sslContext != null) {
				HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
			}
			HttpsURLConnection.setDefaultHostnameVerifier(hnv);

		}

		// 为Basic认证加上用户名和密码
		@Override
		protected PasswordAuthentication getPasswordAuthentication() {
			return new PasswordAuthentication(username, password.toCharArray());
		}
	}

	/**
	 * 重写X509TrustManager的方法,用于支持https连接。但是并未对服务器的证书作验证,它就会信任任何证书。
	 * 
	 */
	private class MyX509TrustManager implements X509TrustManager {

		/*
		 * 该方法检查客户端的证书,若不信任该证书则抛出异常。
		 */
		@Override
		public void checkClientTrusted(X509Certificate[] chain, String authType) {

		}

		/*
		 * 该方法检查服务器的证书,若不信任该证书同样抛出异常。通过自己实现该方法,可以使之信任我们指定的任何证书。在实现该方法时,
		 * 也可以简单的不做任何处理, 即一个空的函数体,由于不会抛出异常,它就会信任任何证书。
		 */
		@Override
		public void checkServerTrusted(X509Certificate[] chain, String authType) {

		}

		/*
		 * 返回受信任的X509证书数组。
		 */
		@Override
		public X509Certificate[] getAcceptedIssuers() {
			return null;

		}

	}

	/**
	 * hostname verification
	 * 
	 */
	private class MyHostnameVerifier implements HostnameVerifier {

		@Override
		public boolean verify(String hostname, SSLSession session) {
			return true;
		}
	}
}
 

 

分享到:
评论

相关推荐

    https协议下的文件下载

    本文将深入探讨“HTTPS协议下的文件下载”这一主题,并通过分析提供的FileDownload.java源码,解析其实现原理。 首先,了解HTTPS的基础知识是必要的。HTTPS(HyperText Transfer Protocol Secure)是一种基于SSL/...

    java访问https网址下载文件(含证书)

    在Java编程中,访问HTTPS网址并下载文件是一个常见的任务,特别是在需要安全传输敏感数据或确保数据完整性时。这里我们将深入探讨如何使用Java 1.7版本处理这一过程,包括处理SSL证书。 首先,理解HTTPS(超文本...

    打开socket 下载https文件

    在IT行业中,网络通信是至关重要的一个领域,而Socket编程是构建网络应用程序的基础。当我们谈论“打开socket下载https...在实际开发过程中,还需要注意代码的安全性和性能优化,确保用户能够安全、高效地下载文件。

    实现简单的登录,以及文件的上传下载

    在IT行业中,构建一个能够处理用户登录、文件上传和下载功能的系统是常见的需求,尤其在Web应用中。本文将详细讲解如何实现这些关键功能。 首先,我们关注"登录"部分。登录系统的核心是身份验证和授权。身份验证...

    在线文档下载器

    用户通过运行这个可执行文件启动下载器并进行操作。 “冰点文库下载.txt”可能是包含有关如何使用该下载器下载百度文库文档的说明文本。冰点文库是一个常见的文档下载工具,它的名称可能源自其能绕过某些文档的下载...

    【原创力文档下载工具】利用python下载原创力文档 .zip

    在这个项目中,开发者使用Python来自动化获取并下载原创力平台上的文档内容。下面将详细阐述相关知识点。 1. Python编程基础:Python是一种高级编程语言,以其简洁的语法和丰富的库资源著称。在这个项目中,开发者...

    (注册登录+文件上传下载+数据库) 完整源码(SSM整合项目)

    内容包含:一个注册登录+文件上传下载+数据库文件,代码一起打包在文件里。 开发环境:Eclipse+Tomcat9.0.58 SSM整合项目 登录注册就比较简单,数据提交用的就是普通的提交方式。主要使用到的技术:Spring+SpringMVC...

    豆丁文档下载工具无需登录

    豆丁文档下载工具是一款专为用户解决在豆丁网下载文档时遇到的登录难题而设计的应用。这款工具的独特之处在于,它允许用户无须注册或登录豆丁账号就能下载豆丁网上的一些付费或限制访问的文档,从而节省了时间和精力...

    不需要会员的文档下载器

    6. **潜在风险**:虽然这类工具为用户带来了便利,但使用时也需注意版权问题,尊重并遵守相关法律法规,确保下载的文档不侵犯原作者权益。 总的来说,"不需要会员的文档下载器"是一种实用工具,能帮助用户节省成本...

    文件上传下载登录注册页面

    时间判断可能涉及多种场景,如设置文件的有效期、限制用户只能在特定时间内上传或下载文件等。这需要服务器端具备处理日期和时间的能力,例如,可以使用`datetime`模块(Python)、`java.time`包(Java)或`System....

    豆丁网文件下载器

    豆丁网免费下载器(冰点)无需登录也无需积分,只需要将需要下载的文档的网页地址复制在软件的录入框中就可以自由下载,并最终生成pdf文件。对部分pdf文件能够提取文字生成txt。 豆丁网免费下载器还支持自由下载百度、...

    开发板远程登录及tftp文件下载

    **下载文件**:在开发板端使用TFTP客户端下载文件。例如,使用以下命令从TFTP服务器下载文件到SD卡: ``` tftp -r filename -l newfilename -g TFTP_SERVER_IP ``` 其中`filename`为待下载的文件名,`...

    wget for windows命令行下载工具, 支持https, 支持win10

    在Windows 10系统中,wget同样表现优秀,用户可以通过命令行界面进行文件的下载操作,尤其适合自动化脚本或者无人值守的批量下载任务。 HTTPS(Hypertext Transfer Protocol Secure)是一种安全的网络通信协议,它...

    文档 下载 免费 免 登陆 注册

    3. 免登录下载的便利性和可能存在的法律风险。 4. 文件格式转换的重要性,以及冰点文库下载器可能提供的格式转换服务。 5. 使用第三方工具时的注意事项,包括软件更新和兼容性问题。 6. 尊重知识产权的概念及其在...

    文档下载器.zip

    5. ddini.ini:这是配置文件,很可能包含了“豆丁当当.exe”的设置和偏好,如默认下载路径、登录信息等,用户可以通过修改此文件自定义软件的行为。 6. 更新日志.txt:这是一个文本文件,记录了软件的更新历史,...

    asp.net 使用url/ftp路径下载远程文档

    在ASP.NET中,开发人员经常需要处理从远程服务器下载文件的需求,这可能涉及到通过URL或FTP协议访问资源。本文将详细讲解如何使用ASP.NET结合WebClient类来实现这个功能。 首先,我们需要理解URL(统一资源定位符)...

    C#多线程文件下载工具(访问restful形式接口)

    在下载文件前进行身份验证是确保安全的重要步骤。这可能涉及到向服务器发送用户名和密码,或者使用令牌(token-based authentication)进行认证。C#的HttpClient类可以方便地添加HTTP头以包含这些认证信息。 然后是...

    如何在西门子官网下载产品的图纸和手册等文件?.docx

    最后一步是设置下载文件夹的名字以及查看预估的下载文件大小。确认无误后,点击“创建 Cax 下载”按钮。 **第八步:等待处理及下载** 提交下载请求后,系统会自动处理并将文件打包成压缩格式。这个过程可能需要几...

    免费下载豆丁文档工具

    然而,通常情况下,豆丁网的部分文档是需要付费或者通过积累积分才能下载的。对于那些希望免费获取这些资源的用户来说,这可能会带来一定的困扰。 "免费下载豆丁文档工具"则为用户提供了无需注册、无需积分即可下载...

Global site tag (gtag.js) - Google Analytics