httpclientロゴ、幅= 325、高さ= 100

この記事では、http://hc.apache.org/[Apache HttpClient]を使用してHTTP GET/POSTリクエストを送信する方法を説明します。

1. HTTP GETリクエストを送信する

HTTPのGETリクエストを送信してGoogleの検索結果を取得するための `HttpClient ‘

    String url = "http://www.google.com/search?q=httpClient";

    HttpClient client = HttpClientBuilder.create().build();
    HttpGet request = new HttpGet(url);

   //add request header
    request.addHeader("User-Agent", USER__AGENT);
    HttpResponse response = client.execute(request);

    System.out.println("Response Code : "
                + response.getStatusLine().getStatusCode());

    BufferedReader rd = new BufferedReader(
        new InputStreamReader(response.getEntity().getContent()));

    StringBuffer result = new StringBuffer();
    String line = "";
    while ((line = rd.readLine()) != null) {
        result.append(line);
    }

2. HTTP POSTリクエストを送信する

HTTP POSTリクエストをApple.comの検索フォームに送るための

HttpClient

    String url = "https://selfsolve.apple.com/wcResults.do";

    HttpClient client = HttpClientBuilder.create().build();
    HttpPost post = new HttpPost(url);

   //add header
    post.setHeader("User-Agent", USER__AGENT);

    List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
    urlParameters.add(new BasicNameValuePair("sn", "C02G8416DRJM"));
    urlParameters.add(new BasicNameValuePair("cn", ""));
    urlParameters.add(new BasicNameValuePair("locale", ""));
    urlParameters.add(new BasicNameValuePair("caller", ""));
    urlParameters.add(new BasicNameValuePair("num", "12345"));

    post.setEntity(new UrlEncodedFormEntity(urlParameters));

    HttpResponse response = client.execute(post);
    System.out.println("Response Code : "
                + response.getStatusLine().getStatusCode());

    BufferedReader rd = new BufferedReader(
            new InputStreamReader(response.getEntity().getContent()));

    StringBuffer result = new StringBuffer();
    String line = "";
    while ((line = rd.readLine()) != null) {
        result.append(line);
    }

3. Apache HttpClient – ログインの自動化Google

Gmailへのログインを自動化する完全な例。

  1. ログインフォームを取得するためのGETリクエストを送信します.

  2. jsoup htmlパーサーを使用してフォーム入力を取得します.

  3. パラメータを構築し、認証のためのPOST要求を行います.

  4. 別のGETリクエストをGmailに送信します.

HttpCilentExample.java

package com.mkyong;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class HttpCilentExample {

  private String cookies;
  private HttpClient client = HttpClientBuilder.create().build();
  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/";

   //make sure cookies is turn on
    CookieHandler.setDefault(new CookieManager());

    HttpCilentExample http = new HttpCilentExample();

    String page = http.GetPageContent(url);

    List<NameValuePair> postParams =
               http.getFormParams(page, "username","password");

    http.sendPost(url, postParams);

    String result = http.GetPageContent(gmail);
    System.out.println(result);

    System.out.println("Done");
  }

  private void sendPost(String url, List<NameValuePair> postParams)
        throws Exception {

    HttpPost post = new HttpPost(url);

   //add header
    post.setHeader("Host", "accounts.google.com");
    post.setHeader("User-Agent", USER__AGENT);
    post.setHeader("Accept",
             "text/html,application/xhtml+xml,application/xml;q=0.9,** /** ;q=0.8");
    post.setHeader("Accept-Language", "en-US,en;q=0.5");
    post.setHeader("Cookie", getCookies());
    post.setHeader("Connection", "keep-alive");
    post.setHeader("Referer", "https://accounts.google.com/ServiceLoginAuth");
    post.setHeader("Content-Type", "application/x-www-form-urlencoded");

    post.setEntity(new UrlEncodedFormEntity(postParams));

    HttpResponse response = client.execute(post);

    int responseCode = response.getStatusLine().getStatusCode();

    System.out.println("\nSending 'POST' request to URL : " + url);
    System.out.println("Post parameters : " + postParams);
    System.out.println("Response Code : " + responseCode);

    BufferedReader rd = new BufferedReader(
                new InputStreamReader(response.getEntity().getContent()));

    StringBuffer result = new StringBuffer();
    String line = "";
    while ((line = rd.readLine()) != null) {
        result.append(line);
    }

   //System.out.println(result.toString());

  }

  private String GetPageContent(String url) throws Exception {

    HttpGet request = new HttpGet(url);

    request.setHeader("User-Agent", USER__AGENT);
    request.setHeader("Accept",
        "text/html,application/xhtml+xml,application/xml;q=0.9,** /** ;q=0.8");
    request.setHeader("Accept-Language", "en-US,en;q=0.5");

    HttpResponse response = client.execute(request);
    int responseCode = response.getStatusLine().getStatusCode();

    System.out.println("\nSending 'GET' request to URL : " + url);
    System.out.println("Response Code : " + responseCode);

    BufferedReader rd = new BufferedReader(
                new InputStreamReader(response.getEntity().getContent()));

    StringBuffer result = new StringBuffer();
    String line = "";
    while ((line = rd.readLine()) != null) {
        result.append(line);
    }

   //set cookies
    setCookies(response.getFirstHeader("Set-Cookie") == null ? "" :
                     response.getFirstHeader("Set-Cookie").toString());

    return result.toString();

  }

  public List<NameValuePair> 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<NameValuePair> paramList = new ArrayList<NameValuePair>();

    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(new BasicNameValuePair(key, value));

    }

    return paramList;
  }

  public String getCookies() {
    return cookies;
  }

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

}

参考文献


  1. Apache HttpClient


  2. jsoup library

  3. リンク://java/how-to-automate-login-a-website-java-example/[自動化

JavaでGmailをログインするHttpsURLConnection]