1. 程式人生 > >用java 自動登入一個網站的例子

用java 自動登入一個網站的例子

程式程式碼 程式程式碼

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<String> 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, "
[email protected]
", "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<String> getCookies() { return cookies; } public void setCookies(List<String> cookies) { this.cookies = cookies; } }


相關推薦

java 自動登入一個網站例子

程式程式碼 程式程式碼 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException;

java寫的一個利用socket通訊的C/S小例子

Server的原始碼: import java.net.*;import java.io.*; public class Server{private ServerSocket ss;private Socket socket;private BufferedReader i

Java GUI做一個簡單的管理系統

java 管理系統 gui 1.先完成主頁面MainUI(代碼如下)package com.pag_1; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.

JAVA發送一個XML格式的HTTP請求

response ops pri source methods mar 桌面 reader ase 1 import java.io.BufferedInputStream; 2 import java.io.BufferedReader; 3 imp

Java制作一個簡單的圖片驗證碼

err 一個 graphic opera login new pri buffer image //Java實現簡單驗證碼功能 package project; import java.awt.Color; import java.awt.Font;import java.

Java自己寫一個反轉字串的方法

     關於反轉字串的方法,Java中的StringBuffer類中有現成的方法,自己寫一個是為了提高自己的程式設計能力。     挺簡單的,主要是用了String類的構造方法,Java的自動拆裝箱機制,剩下的就是基本的迴圈了,供朋友們參考

java自動登入

溫故而知新。從其他頁面訪問時,如直接訪問index頁面,勾選過自動登入,從session/cookie獲取使用者資訊,沒有勾選,從session中獲取使用者資訊,需要使用filter過濾器 工程結構,採用gradle構建: public class User { pri

java自動登入功能和記住使用者名稱功能

實現在這兩個功能,都需要用到coolie技術,將所需要的使用者名稱或者密碼帶到瀏覽器端,實現使用者名稱和密碼的記錄,然後完成所要的功能。 一、自動登入功能 後臺的程式碼 1.1、後臺servlet中的程式碼 //1、判斷是否勾選了自動登入的複選框

Java 手把手寫一個“二叉搜尋樹”,支援泛型

一、二叉搜尋樹 先說一下二叉樹,二叉樹是一種至多隻有左右兩個子結點的樹形結構。 二叉搜尋樹是二叉樹的一種,對於任意一個結點 x,其左子樹的任一結點的值都不大於 x 的值,其右子樹的任一結點的值都不小於 x 的值。 二叉搜尋樹上的基本操作有 查詢 (search)、最小值

自己java寫的一個swing版的萬年曆

import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import j

(3) java編譯器實現一個簡單的編譯器-語法分析

轉載地址:http://blog.csdn.net/tyler_download/article/details/50708807 視訊地址:http://study.163.com/course/courseLearn.htm?courseId=1002830012#/l

Java程式碼寫一個判斷兩個二叉樹是否相同

判斷兩個二叉樹是否相同,我覺得應該從三個方面來判斷: 1、若兩個二叉樹都是空樹,則返回true,可認為兩個二叉樹相同; 2、若兩個二叉樹一個為空,一個不為空樹,則兩個二叉樹不相同,返回false; 3、若兩個二叉樹都不為空樹,則判斷兩個節點所指的值是否相同,若相同,則用遞迴

Java程式碼刪除一個已排好序連結串列中重複的數字

題目是:一直一個已排好序的連結串列,刪除其中重複的數字,我的想法是重新建一個連結串列,存沒有重複數字並且是已排好序的數字。 演算法思想是: 首先要考慮該連結串列是否為空或者只有一個節點 重新建立一個連結串列,將原來連結串列的頭節點設為新連結串列的頭節點,然後依次比較原來連結

java去解析一個最簡單的XML檔案

此處僅僅是去解析最基本的XML檔案,XML檔案如下: <Books> <Book> <Name>Java入門</Name> <Price>30.00</Price>

java寫的一個簡單瀏覽器

//--------檔名myBrowser.java,程式編號18.4-------------------- import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import

手把手教你Java搭建自己的網站

經過一段時間的開發,更新,迭代,新浪雲容器 Java 環境逐漸成熟起來,相比過去的 Java 執行環境,可用性和易用性都得到了大量的提升。同時也收到了不少使用者反饋的使用問題,特此在這篇文章裡綜合介紹一下容器 Java 使用以及相關服務的整合。 環境說明 新浪雲容器 Java 環境基於 Docker 搭

JAVA寫了一個簡單的JS程式碼格式化工具

/** * cn.newweapon.JsFormatter */package cn.newweapon;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.FilenameFilter

java實現了一個小的計算器

突然之間心血來潮,就是想試一試資料結構怎麼用.到現在才感覺的,資料結構是一種思想,一種思維方式,用怎樣的方式去解決怎樣的問題,這些是資料結構和演算法給我們的. 言歸正傳吧,說說這個小計算器(其實還有太多需要擴充套件和改進的地方).暫時只侷限在加減乘除,因為定義的是int型別的

java做的一個彩票32選7的簡單程式

這是一個簡單的選取幸運數字的程式 預設的情況是32(1-32)選取7個不同的數字 當然使用者也可以根據自身的需求 自己設定一些數字 生成相應的想要的數字個數(當然不可以大於數字本身的個數) public class First { private int[] setLuck;

java se寫一個超市購物系統

這是一個用java se寫的超市購物系統,能夠根據客戶選擇完成一些功能,程式碼如下:package com.Test6; import java.util.Scanner; public class Test6_5 { //鍵盤錄入數字方法 public int input