`
NealCai
  • 浏览: 144727 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HttpClient不验证证书通过代理模拟登陆HTTPS的例子

    博客分类:
  • java
阅读更多
package com;

public class HttpClientLoginProxy {
public static void main(String[] args) throws Exception{
		
	
		CookieStore cookieStore = new BasicCookieStore();
	
		HttpClientContext context = HttpClientContext.create();
		context.setCookieStore(cookieStore);
		
		RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.BROWSER_COMPATIBILITY).build();
		
		SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build();

		CredentialsProvider credsProvider = new BasicCredentialsProvider();
		//设置https验证的代理,8002为代理Port
		credsProvider.setCredentials(new AuthScope("ProxyIp", 8002),new UsernamePasswordCredentials("yourProxyId", "yourProxyPwd"));

		SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext,new String[] { "TLSv1" },null,SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
		CloseableHttpClient httpclient = HttpClients.custom().setDefaultRequestConfig(globalConfig).setDefaultCredentialsProvider(credsProvider).setDefaultCookieStore(cookieStore).setSSLSocketFactory(sslsf).build();
		try {
			
			HttpHost httpHost = new HttpHost("yourHostIp", 443, "https");
			//设置代理,8002为代理Port
			HttpHost proxy = new HttpHost("ProxyIp", 8002);
			RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
			//Login的URL
			HttpPost httppost = new HttpPost("/LOGIN");
			httppost.setConfig(config);
			//表单填写
			List<NameValuePair> formparams = new ArrayList<NameValuePair>();
			formparams.add(new BasicNameValuePair("admin", "admin"));
			formparams.add(new BasicNameValuePair("password", "password"));
			formparams.add(new BasicNameValuePair("destination", "/index.html"));
			
			UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);
			httppost.setEntity(entity);

			//System.out.println("Executing request " + httppost.getRequestLine() 	+ " to " + httppost + " via " + proxy);

			ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
				public String handleResponse(final HttpResponse response) throws ClientProtocolException, IOException {
					int status = response.getStatusLine().getStatusCode();
					//status可以手动登陆后用firebug或者fiddler抓取返回
					if (status >= 200 && status < 303) {
						HttpEntity entity = response.getEntity();
						return entity != null ? EntityUtils.toString(entity) : null;
					} else {
						throw new ClientProtocolException("Unexpected response status: " + status);
					}
				}
			};

			//登录
			System.out.println("===========执行登录=============");
			String response = httpclient.execute(httpHost,httppost,responseHandler,context);
            System.out.println(response);
            httppost.releaseConnection();
            System.out.println("===========访问第二个页面===========");

            //访问登陆后的第二个页面,并打印出来,这边要注意第二个页面是Post还是Get方式提交表单,如果是post请用HttpPost
            HttpGet httpgetConn = new HttpGet("yourNextPageUrl");
            httpgetConn.setConfig(config);
            String responseConn = httpclient.execute(httpHost,httpgetConn,responseHandler);

            System.out.println(responseConn);
          
            
      
		} finally {
			
            httpclient.close();
		}

	}
}


  主要需要注意的是代理的配置以及表单域参数还有提交方式。
  可以手动登陆后用firebug或者fiddler抓取返回的status以及表单的元素。
  这个例子是可以不下载证书登录https的,如果想要以下载证书的方式,可以用比如说chrome下载了https的证书然后加载到jdk中,具体可以网上查下,但是如果网站更新了证书,模拟登陆也需要重新导入证书。
  如果不需要使用代理,可以将proxy涉及的代码去掉,即可以直接登录。

0
1
分享到:
评论

相关推荐

    HttpClient4.5 实现https忽略SSL证书验证

    使用HttpClient4.5实现https请求忽略SSL证书验证工具类

    httpclient 绕开HTTPS证书校验

    `createUnsafeHttpClient()`方法创建了一个不执行任何证书或主机名验证的`CloseableHttpClient`实例。这种方法虽然方便了开发和测试,但强烈建议不要在生产环境中使用,因为它极大地降低了安全性,容易受到中间人...

    httpClient实例httpClient调用 http/https实例 忽略SSL验证

    这个实例主要涉及如何配置HttpClient来忽略SSL(Secure Socket Layer)验证,这对于在开发和测试环境中处理自签名证书或未认证的服务器非常有用。以下将详细介绍HttpClient的使用以及如何进行SSL验证的忽略。 首先...

    httpclient4.5发送https请求(验证证书)

    不会的可以在评论区留言哈,这是我自己做项目用到的。所以绝对可用!同时共享出来给到大家

    HttpClient配置SSL绕过https证书实例

    HttpClient配置SSL绕过https证书实例,附件中包含所需httpclient组件jar库。博客地址:http://blog.csdn.net/irokay/article/details/78801307。

    httpclient访问需要客户端认证数字证书的https接口的处理方法

    HTTPS协议是HTTP协议的安全版本,它通过SSL/TLS协议提供加密传输和服务器身份验证,确保数据在传输过程中不被窃取或篡改。当访问需要客户端认证的HTTPS接口时,通常需要提供数字证书以证明客户端的身份。本篇文章将...

    httpclient4之百度模拟登陆,回复与58同城自动登陆

    本主题将深入探讨如何使用HttpClient4库进行百度和58同城的模拟登陆操作。HttpClient4是一个强大的Java库,它提供了丰富的功能来执行HTTP请求,非常适合进行网页交互。 首先,我们来了解HttpClient4的基本用法。...

    httpclient4 微信公众账号模拟登陆

    httpclient4 微信公众账号模拟登陆,网络上看到的,觉得不错上传出来,供大家一起共同分享学习。

    httpclient来进行https访问

    根据提供的文件信息,我们可以深入探讨如何使用`httpclient`库来进行`https`访问,并了解其中涉及的关键概念和技术细节。 ### 标题与描述解析:使用`httpclient`进行`https`访问 #### 1. `httpclient`简介 `...

    httpclient4.3 设置代理

    javase http通讯技术 apache httpclient4.3 设置代理详解

    Jsoup+httpclient模拟登陆和抓取页面.pdf

    Jsoup+httpclient模拟登陆和抓取页面.pdf

    http远程接口调用-httpClient+跳过SSL证书校验

    在IT行业中,网络通信是应用程序之间交互的重要方式。...在apitest文件中,你可以找到包含HttpClient工具类代码,包括专门用于跳过SSL证书校验的工具类,这些代码可以作为参考,帮助你在实际项目中实现类似功能。

    (完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc

    HTTPS协议需要SSL/TLS证书来确保数据的安全,而HttpClient需要忽略证书验证过程,以便与HTTPS服务器进行交互。 在本文中,我们将详细介绍如何使用JAVA的HttpClient库来发送POST请求,以便与HTTPS服务器进行交互。...

    httpClient例子

    关于代理,HttpClient允许通过设置`HttpRoutePlanner`来处理。例如,如果代理服务器地址是`http://proxy.example.com:8080`,你可以这样做: ```java HttpHost proxy = new HttpHost("proxy.example.com", 8080, ...

    HttpClient模拟登陆方正系统

    HttpClient是一个支持HTTP协议的客户端编程工具,支持HTTP/1.1及其后续版本,提供了丰富的功能,包括但不限于请求/响应模型、连接管理、重试机制、身份验证和缓存等。它的主要优点是灵活性高、易于使用和可扩展性强...

    HttpClient模拟登陆

    在阅读博文《HttpClient模拟登陆》时,可以深入学习如何解决这些具体问题,并查看示例代码以获得更详细的实现细节。 标签“源码”意味着你需要关注底层的工作原理,而“工具”标签则暗示HttpClient作为一个实用工具...

    新浪,腾讯微博HttpClient4模拟登陆

    在IT行业中,网络爬虫和自动化测试经常需要用到模拟登录技术,以便访问和处理需要用户身份验证的网页。本文将深入探讨如何使用Java中的HttpClient4库来实现对新浪和腾讯微博的模拟登录。HttpClient4是一个强大的HTTP...

    Android使用HttpClient和HttpsUrlConnection两种方式访问https网站

    本文将详细介绍如何使用`HttpClient`和`HttpsURLConnection`两种方式来访问HTTPS网站,包括验证证书和不验证证书的实现方法。 ### 1. Android中的HttpClient `HttpClient`是Apache提供的一种HTTP客户端库,它支持...

    httpClient自动接受https的证书代码

    在IT行业中,HTTPS(HyperText Transfer Protocol Secure)是一种用于安全数据传输的协议,它通过SSL/TLS证书确保了网络通信的加密和身份验证。HttpClient是一个流行的Java库,用于执行HTTP和HTTPS请求。当我们使用...

    HttpClient4基础1--通过匿名代理访问网页

    本篇将重点介绍HttpClient4的基础用法,特别是如何通过匿名代理来访问网页。 首先,让我们了解什么是HTTP代理。在互联网通信中,代理服务器充当了客户端与目标服务器之间的中介,可以用于匿名访问、负载均衡、缓存...

Global site tag (gtag.js) - Google Analytics