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涉及的代码去掉,即可以直接登录。
分享到:
相关推荐
使用HttpClient4.5实现https请求忽略SSL证书验证工具类
`createUnsafeHttpClient()`方法创建了一个不执行任何证书或主机名验证的`CloseableHttpClient`实例。这种方法虽然方便了开发和测试,但强烈建议不要在生产环境中使用,因为它极大地降低了安全性,容易受到中间人...
这个实例主要涉及如何配置HttpClient来忽略SSL(Secure Socket Layer)验证,这对于在开发和测试环境中处理自签名证书或未认证的服务器非常有用。以下将详细介绍HttpClient的使用以及如何进行SSL验证的忽略。 首先...
不会的可以在评论区留言哈,这是我自己做项目用到的。所以绝对可用!同时共享出来给到大家
HTTPS协议是HTTP协议的安全版本,它通过SSL/TLS协议提供加密传输和服务器身份验证,确保数据在传输过程中不被窃取或篡改。当访问需要客户端认证的HTTPS接口时,通常需要提供数字证书以证明客户端的身份。本篇文章将...
HttpClient配置SSL绕过https证书实例,附件中包含所需httpclient组件jar库。博客地址:http://blog.csdn.net/irokay/article/details/78801307。
本主题将深入探讨如何使用HttpClient4库进行百度和58同城的模拟登陆操作。HttpClient4是一个强大的Java库,它提供了丰富的功能来执行HTTP请求,非常适合进行网页交互。 首先,我们来了解HttpClient4的基本用法。...
httpclient4 微信公众账号模拟登陆,网络上看到的,觉得不错上传出来,供大家一起共同分享学习。
根据提供的文件信息,我们可以深入探讨如何使用`httpclient`库来进行`https`访问,并了解其中涉及的关键概念和技术细节。 ### 标题与描述解析:使用`httpclient`进行`https`访问 #### 1. `httpclient`简介 `...
javase http通讯技术 apache httpclient4.3 设置代理详解
Jsoup+httpclient模拟登陆和抓取页面.pdf
在IT行业中,网络通信是应用程序之间交互的重要方式。...在apitest文件中,你可以找到包含HttpClient工具类代码,包括专门用于跳过SSL证书校验的工具类,这些代码可以作为参考,帮助你在实际项目中实现类似功能。
关于代理,HttpClient允许通过设置`HttpRoutePlanner`来处理。例如,如果代理服务器地址是`http://proxy.example.com:8080`,你可以这样做: ```java HttpHost proxy = new HttpHost("proxy.example.com", 8080, ...
HttpClient是一个支持HTTP协议的客户端编程工具,支持HTTP/1.1及其后续版本,提供了丰富的功能,包括但不限于请求/响应模型、连接管理、重试机制、身份验证和缓存等。它的主要优点是灵活性高、易于使用和可扩展性强...
在阅读博文《HttpClient模拟登陆》时,可以深入学习如何解决这些具体问题,并查看示例代码以获得更详细的实现细节。 标签“源码”意味着你需要关注底层的工作原理,而“工具”标签则暗示HttpClient作为一个实用工具...
在IT行业中,网络爬虫和自动化测试经常需要用到模拟登录技术,以便访问和处理需要用户身份验证的网页。本文将深入探讨如何使用Java中的HttpClient4库来实现对新浪和腾讯微博的模拟登录。HttpClient4是一个强大的HTTP...
本文将详细介绍如何使用`HttpClient`和`HttpsURLConnection`两种方式来访问HTTPS网站,包括验证证书和不验证证书的实现方法。 ### 1. Android中的HttpClient `HttpClient`是Apache提供的一种HTTP客户端库,它支持...
在IT行业中,HTTPS(HyperText Transfer Protocol Secure)是一种用于安全数据传输的协议,它通过SSL/TLS证书确保了网络通信的加密和身份验证。HttpClient是一个流行的Java库,用于执行HTTP和HTTPS请求。当我们使用...
本篇将重点介绍HttpClient4的基础用法,特别是如何通过匿名代理来访问网页。 首先,让我们了解什么是HTTP代理。在互联网通信中,代理服务器充当了客户端与目标服务器之间的中介,可以用于匿名访问、负载均衡、缓存...
通过`java_httpclient_post`这个文件名,我们可以推测其中可能包含了完整的示例代码或者相关教程,你可以参考这个文件来实践和学习HttpClient的POST请求使用。记住,实践是检验理论的最好方式,尝试运行这个例子,看...