Java の HttpClient の使い方 (Get)

次のページを参考にしました。
[Java HTTP通信のサンプル(HttpClient)](https://itsakura.com/java-httpclient)

Ubuntu 21.04 で確認しました。

```java:Http_get.java
// -----------------------------------------------------------------------
/*
	Http_get.java

				Jul/30/2020
*/
// -----------------------------------------------------------------------
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

/**
 * HttpClientsのサンプル
 */
class Uri_get
{
	static String uri_get_proc(String uri)
		{
		String res = "";
		Charset charset = StandardCharsets.UTF_8;
		
		CloseableHttpClient httpclient = HttpClients.createDefault();
		HttpGet request = new HttpGet(uri);
		
		System.out.println
			("requestの実行　「" + request.getRequestLine() + "」");
		
		CloseableHttpResponse response = null;

		try {
			response = httpclient.execute(request);
			
			int status = response.getStatusLine().getStatusCode();
			System.out.println("HTTPステータス:" + status);
			//HTTPステータス:200
			
			if (status == HttpStatus.SC_OK){				
				res = EntityUtils.toString(response.getEntity(),charset);				
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (response != null) {
					response.close();
				}
				if (httpclient != null) {
					httpclient.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return res;
	}
}

// -----------------------------------------------------------------------
public class Http_get
{
	public static void main(String[] args)
	{
		String uri = "https://httpbin.org/get";

		String res = Uri_get.uri_get_proc(uri);
		System.out.println(res);
	}
}

// -----------------------------------------------------------------------
```

```text:Makefile
LIB=/usr/share/java
HTTPCLIENT_JAR=.:$(LIB)/httpclient-4.5.13.jar:$(LIB)/httpcore-4.4.14.jar
Http_get.class: Http_get.java
	javac -cp $(HTTPCLIENT_JAR) Http_get.java
clean:
	rm -f *.class
```

実行コマンド

```bash
LIB=/usr/share/java
HTTPCLIENT_JAR=.:$LIB/httpclient-4.5.13.jar:$LIB/httpcore-4.4.14.jar:$LIB/commons-logging-1.2.jar
#
java -cp $HTTPCLIENT_JAR Http_get
```

実行結果

```text
requestの実行　「GET https://httpbin.org/get HTTP/1.1」
HTTPステータス:200
{
  "args": {}, 
  "headers": {
    "Accept-Encoding": "gzip,deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "Apache-HttpClient/4.5.13 (Java/11.0.11)", 
    "X-Amzn-Trace-Id": "Root=1-5f226ffa-accebcf2bde7af40b3507628"
  }, 
  "origin": "219.126.139.62", 
  "url": "https://httpbin.org/get"
}

```

同じことを curl で実行すると

```text
$ curl https://httpbin.org/get
{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.68.0", 
    "X-Amzn-Trace-Id": "Root=1-5f227030-f41530438d1cfcefe66f5c05"
  }, 
  "origin": "219.126.139.62", 
  "url": "https://httpbin.org/get"
}
```