コンテンツへスキップ

開発者ドキュメント

ウェブサイトのログインを自動化する方法 – Javaの例

  • 投稿日: 2019-11-05 2019-11-05
  • タグ: java network, login


login-form、width = 320、height = 240

この例では、標準のJava「HttpsURLConnection」を使用してWebサイトにログインする方法を示します。この手法は、ほとんどのログインフォームで機能するはずです。

ツール

  1. Google Chromeブラウザ – HTTPリクエストを分析するための[ネットワーク]タブ

レスポンスヘッダフィールド。


  1. jsoup

    library – HTMLフォームの値を抽出します.

  2. JDK 6.

1. HTTPヘッダ、フォームデータを分析します.

ウェブサイトにログインするには、以下の値を知っている必要があります:

  1. ログインフォームのURL.

  2. ログインフォームデータ.

  3. 認証のためのURL.

  4. HTTP要求/応答ヘッダー.

Google Chromeを使用してデータを上書きします。 Chromeでは、どこでも右クリックし、「要素の検査」 – >「ネットワーク」タブを選択します。


chrome-network、width = 640、height = 357

コードを作成する前に、Chrome経由でログインし、HTTPリクエスト、応答、フォームデータの仕組みを観察し、後でJavaで同じ手順をシミュレートする必要があります。

2. HttpsURLConnectionの例

この例では、Gmailにログインする方法を示します。

要約:

  1. GoogleのログインフォームにHTTP「GET」リクエストを送信する –


https://accounts.google.com/ServiceLoginAuth

。 Google Chromeの「ネットワーク」機能を使用してフォームデータを分析します。

また、HTMLソースコードを表示することもできます。

  1. 可視および非表示のフォームのデータをすべて抽出するには、jSoupライブラリを使用します.

あなたのユーザー名とパスワードで置き換えてください。

  1. ログインフォームにHTTP “POST”リクエストを送信します.

構築されたパラメータ
。ユーザーの認証後、別のHTTP「GET」リクエストをGmailに送信します

ページ。

https://mail.google.com/mail/

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<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, "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<String> getCookies() {
    return cookies;
  }

  public void setCookies(List<String> cookies) {
    this.cookies = cookies;
  }

}

出力

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
<!-- gmail page content.....-->

  • 注** この同等の例を参照してください。ただし、

    HTTPリクエストを送信するためのApache HttpClient

    を使用してください。

参考文献


  1. ウェブサイトへの自動ログイン


  2. http://developer.android.com/reference/java/net/HttpURLConnection.html

    [Android

ドキュメント – HttpURLConnection]。

http://stackoverflow.com/questions/9954731/sending-http-request-get-post-to-form-with-java

[Sending

Javaで生成するHTTP要求GET/POST?]。

jSoup library

  1. リンク://java/apache-httpclient-examples/[Apache HttpClientの例]


java network


login

投稿ナビゲーション

前 前の投稿: Maven 2 + Hibernate 3.2 + MySQLの例(XMLマッピング)
次 次の投稿: Android搭載の実機でのデバッグ

getdocs

13036RSS




タグ

Algorithms apache Applications CentOS Core Java Databases debian Development DevOps Docker Hibernate Java Java Collections javascript Let's Encrypt Linux Basics Maven Miscellaneous MongoDB Monitoring mysql Networking nginx Node.js NoSQL Persistence php Programming python React REST Security Spring Spring Boot Spring MVC Spring Security System Tools Testing ubuntu Ubuntu 16.04 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 18.04 Vue.js Weekly Review

最近の投稿

  • arpingコマンド
  • ターミナルからプロセスを完全に切り離す
  • iPerfを使用してネットワークパフォーマンスを測定する方法
  • コマンドラインからLinuxディストリビューションを探す
  • パブリックDMZネットワークアーキテクチャ

60日間無料の$100ドルのクレジットを取得

60日間無料の$100ドルのクレジットを取得

© 2025  開発者ドキュメント. Proudly powered by WordPress. WordStar, Theme by Linesh Jose

モバイルバージョンに移動