模拟登陆
2015-07-13 16:23
344 查看
How to automate login a website – Java example
By mkyong | May 22, 2013 | Last Updated : May 23, 2013
原文地址:http://www.mkyong.com/java/how-to-automate-login-a-website-java-example/
login-form
In this example, we will show you how to login a website via standard Java HttpsURLConnection. This technique should be working in most of the login form.
Tools & Java Library used in this example
Google Chrome Browser – Network tab to analyze HTTP request and response header fields.
jsoup library – Extracts HTML form values.
JDK 6.
1. Analyze Http Headers, form data.
To login a website, you need to know following values :
Login form URL.
Login form data.
URL for authentication.
Http request / response header.
Uses Google Chrome to get above data. In Chrome, right click everywhere, choose “Inspect Element” -> “Network” tab.
chrome-network
Before you code, try login via Chrome, observe how the HTTP request, response and form data works, later you need to simulate the same steps in Java.
HttpsURLConnection Example
In this example, we show you how to login Gmail.
Summary :
Send an HTTP “GET” request to Google login form – https://accounts.google.com/ServiceLoginAuth
Analyze the form data via Google Chrome’s “Network” feature. Alternatively, you can view the HTML source code.
Use jSoup library to extract all visible and hidden form’s data, replace with your username and password.
Send a HTTP “POST” request back to login form, along with the constructed parameters
After user authenticated, send another HTTP “GET” request to Gmail page. https://mail.google.com/mail/
Note
This example is just to show you the capability and functionality of Java HttpURLConnection. In general, you should use the Google Gmail API to interact with Gmail.
HttpUrlConnectionExample.java
package com.mkyong;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.HttpsURLConnection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class HttpUrlConnectionExample {
private List cookies;
private HttpsURLConnection conn;
private final String USER_AGENT = “Mozilla/5.0”;
public static void main(String[] args) throws Exception {
}
private void sendPost(String url, String postParams) throws Exception {
}
private String GetPageContent(String url) throws Exception {
}
public String getFormParams(String html, String username, String password)
throws UnsupportedEncodingException {
}
public List getCookies() {
return cookies;
}
public void setCookies(List cookies) {
this.cookies = cookies;
}
}
Output
Sending ‘GET’ request to URL : https://accounts.google.com/ServiceLoginAuth
Response Code : 200
Extracting form data…
Sending ‘POST’ request to URL : https://accounts.google.com/ServiceLoginAuth
Post parameters : dsh=-293322094146108856&GALX=CExqdUbvEr4&timeStmp=&secTok=&_utf8=%E2%98%83
&bgresponse=js_disabled&Email=username&Passwd=password&signIn=Sign+in&PersistentCookie=yes&rmShown=1
Response Code : 200
Sending ‘GET’ request to URL : https://mail.google.com/mail/
Response Code : 200
By mkyong | May 22, 2013 | Last Updated : May 23, 2013
原文地址:http://www.mkyong.com/java/how-to-automate-login-a-website-java-example/
login-form
In this example, we will show you how to login a website via standard Java HttpsURLConnection. This technique should be working in most of the login form.
Tools & Java Library used in this example
Google Chrome Browser – Network tab to analyze HTTP request and response header fields.
jsoup library – Extracts HTML form values.
JDK 6.
1. Analyze Http Headers, form data.
To login a website, you need to know following values :
Login form URL.
Login form data.
URL for authentication.
Http request / response header.
Uses Google Chrome to get above data. In Chrome, right click everywhere, choose “Inspect Element” -> “Network” tab.
chrome-network
Before you code, try login via Chrome, observe how the HTTP request, response and form data works, later you need to simulate the same steps in Java.
HttpsURLConnection Example
In this example, we show you how to login Gmail.
Summary :
Send an HTTP “GET” request to Google login form – https://accounts.google.com/ServiceLoginAuth
Analyze the form data via Google Chrome’s “Network” feature. Alternatively, you can view the HTML source code.
Use jSoup library to extract all visible and hidden form’s data, replace with your username and password.
Send a HTTP “POST” request back to login form, along with the constructed parameters
After user authenticated, send another HTTP “GET” request to Gmail page. https://mail.google.com/mail/
Note
This example is just to show you the capability and functionality of Java HttpURLConnection. In general, you should use the Google Gmail API to interact with Gmail.
HttpUrlConnectionExample.java
package com.mkyong;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.HttpsURLConnection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class HttpUrlConnectionExample {
private List cookies;
private HttpsURLConnection conn;
private final String USER_AGENT = “Mozilla/5.0”;
public static void main(String[] args) throws Exception {
String url = "https://accounts.google.com/ServiceLoginAuth"; String gmail = "https://mail.google.com/mail/"; HttpUrlConnectionExample http = new HttpUrlConnectionExample(); // make sure cookies is turn on CookieHandler.setDefault(new CookieManager()); // 1. Send a "GET" request, so that you can extract the form's data. String page = http.GetPageContent(url); String postParams = http.getFormParams(page, "username@gmail.com", "password"); // 2. Construct above post's content and then send a POST request for // authentication http.sendPost(url, postParams); // 3. success then go to gmail. String result = http.GetPageContent(gmail); System.out.println(result);
}
private void sendPost(String url, String postParams) throws Exception {
URL obj = new URL(url); conn = (HttpsURLConnection) obj.openConnection(); // Acts like a browser conn.setUseCaches(false); conn.setRequestMethod("POST"); conn.setRequestProperty("Host", "accounts.google.com"); conn.setRequestProperty("User-Agent", USER_AGENT); conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); for (String cookie : this.cookies) { conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]); } conn.setRequestProperty("Connection", "keep-alive"); conn.setRequestProperty("Referer", "https://accounts.google.com/ServiceLoginAuth"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Content-Length", Integer.toString(postParams.length())); conn.setDoOutput(true); conn.setDoInput(true); // Send post request DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); wr.writeBytes(postParams); wr.flush(); wr.close(); int responseCode = conn.getResponseCode(); System.out.println("\nSending 'POST' request to URL : " + url); System.out.println("Post parameters : " + postParams); System.out.println("Response Code : " + responseCode); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); // System.out.println(response.toString());
}
private String GetPageContent(String url) throws Exception {
URL obj = new URL(url); conn = (HttpsURLConnection) obj.openConnection(); // default is GET conn.setRequestMethod("GET"); conn.setUseCaches(false); // act like a browser conn.setRequestProperty("User-Agent", USER_AGENT); conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); if (cookies != null) { for (String cookie : this.cookies) { conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]); } } int responseCode = conn.getResponseCode(); System.out.println("\nSending 'GET' request to URL : " + url); System.out.println("Response Code : " + responseCode); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); // Get the response cookies setCookies(conn.getHeaderFields().get("Set-Cookie")); return response.toString();
}
public String getFormParams(String html, String username, String password)
throws UnsupportedEncodingException {
System.out.println("Extracting form's data..."); Document doc = Jsoup.parse(html); // Google form id Element loginform = doc.getElementById("gaia_loginform"); Elements inputElements = loginform.getElementsByTag("input"); List<String> paramList = new ArrayList<String>(); for (Element inputElement : inputElements) { String key = inputElement.attr("name"); String value = inputElement.attr("value"); if (key.equals("Email")) value = username; else if (key.equals("Passwd")) value = password; paramList.add(key + "=" + URLEncoder.encode(value, "UTF-8")); } // build parameters list StringBuilder result = new StringBuilder(); for (String param : paramList) { if (result.length() == 0) { result.append(param); } else { result.append("&" + param); } } return result.toString();
}
public List getCookies() {
return cookies;
}
public void setCookies(List cookies) {
this.cookies = cookies;
}
}
Output
Sending ‘GET’ request to URL : https://accounts.google.com/ServiceLoginAuth
Response Code : 200
Extracting form data…
Sending ‘POST’ request to URL : https://accounts.google.com/ServiceLoginAuth
Post parameters : dsh=-293322094146108856&GALX=CExqdUbvEr4&timeStmp=&secTok=&_utf8=%E2%98%83
&bgresponse=js_disabled&Email=username&Passwd=password&signIn=Sign+in&PersistentCookie=yes&rmShown=1
Response Code : 200
Sending ‘GET’ request to URL : https://mail.google.com/mail/
Response Code : 200
相关文章推荐
- NSstring封装
- 初识Nginx,简单配置实现负载均衡(ubuntu + Nginx + tomcat)
- 单例模式
- JAVA笔记整理(二),下载安装JDK
- sqlserver权限体系(下)
- Pinyin4j使用手册,HanyuPinyinVCharType的意义
- GRE写作必备句型
- 算法八:Bellman-Ford算法及优化
- Android存储方式的选择
- asm下重定向数据文件小例(使用toad工具)
- 老毛桃装系统详解
- 苹果公司的回复
- Hadoop单机模式安装
- HBase单机环境搭建
- HBase hbase-site.xml 参数
- Hadoop伪分布式模式安装
- JAVA笔记整理(一),JAVA介绍
- 《大型网站系统架构的演化》
- 安装wget1.16
- caffe在windows编译工程及运行mnist数据集测试