03 Maret 2018
Menggunakan Apache HttpClient dalam program Java

Tutorial kali ini akan membahas tentang penggunaan library Apache HttpClient dalam program Java. Library ini memungkinkan komunikasi HTTP (Hypertext Transfer Protocol) dari program java ke web server. Disini kita akan mencoba membuat program java yang bisa mengirimkan request HTTP GET dan menampilkan response yang diterima.

Contoh Program

Sebelum membuat program kita perlu menentukan direktori dari program serta menyiapkan library yang akan digunakan. Sebagai contoh, kita tentukan direktori C:\WebClient, didalamnya kita buat folder src dan lib. Selanjutnya download library HttpClient melalui https://hc.apache.org/downloads.cgi (pilih format file yang bisa anda gunakan), kemudian ekstrak ke direktori C:\WebClient\lib.

Konfigurasi Apache Ant

Untuk mempermudah pengerjaan program, kita akan menggunakan tool Apache Ant (tutorial penggunaan Apache Ant bisa dilihat di tulisan sebelumnya). Buat file baru build.xml pada direktori C:\WebClient, kemudian ketikkan kode XML dibawah ini

<?xml version="1.0"?>
<project name="WebClient" basedir="." default="build">

  <path id="classpath">
    <fileset dir="lib">
      <include name="**/*.jar"/>
    </fileset>
  </path>

  <target name="clean">
    <delete dir="build"/>
    <delete dir="dist"/>
  </target>

  <target name="init">
    <mkdir dir="build"/>
    <mkdir dir="dist"/>
  </target>

  <target name="build" depends="clean,init">
    <javac includeAntRuntime="false" srcdir="src" destdir="build">
      <classpath refid="classpath"/>
    </javac>
  </target>

  <target name="dist" depends="build">
    <jar destfile="dist/appClient.jar" basedir="build"/>
  </target>

  <target name="run" depends="dist">
    <java classpath="dist/appClient.jar" classname="com.sad301.Main" fork="true">
      <classpath refid="classpath"/>
      <arg value="https://jsonplaceholder.typicode.com/posts/1"/>
    </java>
  </target>

</project>

Pengkodean

Sebagai referensi dalam pengkodean, saya sarankan pembaca untuk melihat dokumentasi API di URL https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/.

Buat file baru dengan nama Main.java pada direktori C:\WebClient\src. Kode-kode program berikutnya diketikkan dalam file tersebut

Tahap awal yang perlu dilakukan adalah membuat class baru

public class Main {
  // kode berikut ditulis disini
}

Selanjutnya import paket-paket class yang akan digunakan dalam program

import java.io.*;
import java.util.*;
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.client.methods.*;
import org.apache.http.entity.*;
import org.apache.http.impl.client.*;

Dari sini kita bisa lanjutkan ke pembuatan metode untuk request HTTP GET. Fungsi ini akan menggunakan 1 parameter String url.

private static void get(String url) {
  // kode berikut ditulis disini
}

Didalam metode get() kita buat objek CloseableHttpClient menggunakan metode statik HttpClients.createDefault() dan membuat objek HttpGet menggunakan parameter url.

CloseableHttpClient client = HttpClients.createDefault();
HttpGet get = new HttpGet(url);

Request HTTP bisa dikirim dengan menggunakan metode client.execute(). Metode ini menggunakan variabel objek get dan mengembalikan objek CloseableHttpResponse dengan catatan, metode ini berpotensi untuk mengembalikan eksepsi, sebagai contoh jika koneksi ke server gagal.

try {
  CloseableHttpResponse res = client.execute(get);
  // kode berikut ditulis disini
}
catch(IOException exc) {
  System.err.println(exc.toString());
}

Untuk bisa membaca isi dari response kita perlu mendapatkan objek HttpEntity dari objek CloseableHttpResponse. Didalam HttpEntity disediakan metode getContent() yang mengembalikan InputStream. Dari objek InputStream tersebut kita bisa dapatkan isi dari response dalam bentuk String.

InputStream in = res.getEntity().getContent();
String body = new String();
int i = 0;
while((i = in.read()) != -1) body += (char)i;
System.out.println(body);

Seterusnya kita tinggal menutup semua objek yang sudah tidak lagi digunakan

in.close();
res.close();
client.close();

Sampai disini kita tinggal memanggil metode get()

public static void main(String[] args) {
  get(args[0]);
}

Contoh kode selengkapnya adalah sebagai berikut :

package com.sad301;

import java.io.*;
import java.util.*;
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.client.methods.*;
import org.apache.http.entity.*;
import org.apache.http.impl.client.*;

public class Main {

  public static void main(String[] args) {
    get(args[0]);
  }

  private static void get(String url) {
    CloseableHttpClient client = HttpClients.createDefault();
        HttpGet get = new HttpGet(url);
    try {
      CloseableHttpResponse res = client.execute(get);
      InputStream in = res.getEntity().getContent();
      String body = new String();
      int i = 0;
      while((i = in.read()) != -1) body += (char)i;
      System.out.println(body);
      in.close();
      res.close();
      client.close();
    }
    catch(IOException exc) {
      System.err.println(exc.toString());
    }
  }

}

Eksekusi Program

Di tahap ini akan mencoba mengeksekusi program yang sudah dibuat sebelumn menggunakan tool Apache Ant. sederhananya untuk mengeksekusi program kita tinggal mengetikkan perintah dibawah pada aplikasi Command Prompt dalam direktori program

ant run

Jika diperhatikan pada kode build.xml khususnya pada target run, program akan dieksekusi menggunakan sebuah argumen berupa URL https://jsonplaceholder.typicode.com/posts/1 yang jika diakses melalui web browser akan menampilkan konten dalam format JSON.

Hasil eksekusi dari program adalah sebagai berikut :

ant-run