Http Clientは他のシステムインターフェースにアクセスして詳しく説明します.
5972 ワード
一、概要
Http Clientは、Apache Jakata Commonの下のサブプロジェクトであり、効率的で最新の、機能的な豊富なHTTPプロトコルをサポートするクライアントプログラミングツールパッケージを提供し、HTTPプロトコルの最新バージョンと提案をサポートします.Http Clientは既に多くのプロジェクトに応用されています.例えば、Apache Jakataで有名な他の二つのオープンソースプロジェクトのCactusとHTMLUnitはHttpClientを使用しています.
ダウンロード先: http://hc.apache.org/downloads.cgi
二、特性
1.標準に基づいて、純粋なJava言語.Http 1.0とHttp 1.1を実現しました.
2.拡張可能なオブジェクト向け構造でHttp全体の方法(GET、POST、PUT、DELETE、HEAD、OPTNS、and TRACE)を実現しました.
3.HTTPSプロトコルをサポートします.
4.Httpエージェントを通じて透明な接続を確立する.
5.CONNET法を利用して、Httpエージェントを通してトンネルのhttps接続を確立する.
6.Baic、Digest、NTLMv 1、NTLMv 2、NTLM 2 Session、SNPNEGO/Kerberss認証方案.
7.プラグイン式のカスタム認証スキームです.
8.信頼できるソケット工場を持って、第三者の解決案をより使いやすいようにします.
9.接続マネージャはマルチスレッドアプリケーションをサポートします.最大接続数の設定をサポートします.ホストごとの最大接続数の設定をサポートします.有効期限が切れている接続を見つけてオフにします.
10.Set-CookieのCookieを自動処理します.
11.プラグイン式のカスタムCookieポリシー.
12.Requestの出力ストリームは、ストリーム中のコンテンツが直接socketサーバにバッファリングされるのを避けることができます.
13.Responseの入力ストリームは、効率的にsocketサーバから直接にコンテンツを読み取ることができる.
14.http 1.0とhttp 1.1ではKeepAliveを利用して永続的な接続を維持します.
15.サーバから送信されたレスポンスコードとheadersを直接取得します.
16.接続タイムアウトの能力を設定します.
17.実験的なサポートhttp 1.1 reponse caching.
18.ソースコードはApache Licenseに基づいて無料で取得できます.
三、使い方
HttpClientを使って要求を送信し、応答を受信するのは簡単です.普通は次のステップが必要です.
1. HttpClientオブジェクトを作成します.
2. 要求方法の一例を作成し、要求URLを指定する.もしGET要求を送信する必要があるなら、HttpGetオブジェクトを作成する.POST要求を送信する必要があれば、HttpPostオブジェクトを作成します.
3. 要求パラメータを送信する必要がある場合は、要求パラメータを追加するために、HttpGet、HttpPost共通のsetParaams(HetpParams)方法を呼び出すことができる.HttpPostオブジェクトに対して、要求パラメータを設定するためにset Entityメソッドを呼び出すこともできます.
4. HttpClientオブジェクトのexecuteを呼び出して要求を送ります.この方法はHttpRequest requestを返します.
5. HttpResonseを呼び出すgetAllHeaders()、getHeaders(String name)などの方法でサーバの応答ヘッダを取得することができます.HttpResonseを呼び出したget Entityメソッドは、サーバの応答内容を包装したHttp Entityオブジェクトを取得することができます.プログラムは、そのオブジェクトを介してサーバの応答内容を取得することができます.
6. 接続を解除します.実行方法が成功するかどうかにかかわらず、接続を解除しなければならない.
四、実例
Http Clientは、Apache Jakata Commonの下のサブプロジェクトであり、効率的で最新の、機能的な豊富なHTTPプロトコルをサポートするクライアントプログラミングツールパッケージを提供し、HTTPプロトコルの最新バージョンと提案をサポートします.Http Clientは既に多くのプロジェクトに応用されています.例えば、Apache Jakataで有名な他の二つのオープンソースプロジェクトのCactusとHTMLUnitはHttpClientを使用しています.
ダウンロード先: http://hc.apache.org/downloads.cgi
二、特性
1.標準に基づいて、純粋なJava言語.Http 1.0とHttp 1.1を実現しました.
2.拡張可能なオブジェクト向け構造でHttp全体の方法(GET、POST、PUT、DELETE、HEAD、OPTNS、and TRACE)を実現しました.
3.HTTPSプロトコルをサポートします.
4.Httpエージェントを通じて透明な接続を確立する.
5.CONNET法を利用して、Httpエージェントを通してトンネルのhttps接続を確立する.
6.Baic、Digest、NTLMv 1、NTLMv 2、NTLM 2 Session、SNPNEGO/Kerberss認証方案.
7.プラグイン式のカスタム認証スキームです.
8.信頼できるソケット工場を持って、第三者の解決案をより使いやすいようにします.
9.接続マネージャはマルチスレッドアプリケーションをサポートします.最大接続数の設定をサポートします.ホストごとの最大接続数の設定をサポートします.有効期限が切れている接続を見つけてオフにします.
10.Set-CookieのCookieを自動処理します.
11.プラグイン式のカスタムCookieポリシー.
12.Requestの出力ストリームは、ストリーム中のコンテンツが直接socketサーバにバッファリングされるのを避けることができます.
13.Responseの入力ストリームは、効率的にsocketサーバから直接にコンテンツを読み取ることができる.
14.http 1.0とhttp 1.1ではKeepAliveを利用して永続的な接続を維持します.
15.サーバから送信されたレスポンスコードとheadersを直接取得します.
16.接続タイムアウトの能力を設定します.
17.実験的なサポートhttp 1.1 reponse caching.
18.ソースコードはApache Licenseに基づいて無料で取得できます.
三、使い方
HttpClientを使って要求を送信し、応答を受信するのは簡単です.普通は次のステップが必要です.
1. HttpClientオブジェクトを作成します.
2. 要求方法の一例を作成し、要求URLを指定する.もしGET要求を送信する必要があるなら、HttpGetオブジェクトを作成する.POST要求を送信する必要があれば、HttpPostオブジェクトを作成します.
3. 要求パラメータを送信する必要がある場合は、要求パラメータを追加するために、HttpGet、HttpPost共通のsetParaams(HetpParams)方法を呼び出すことができる.HttpPostオブジェクトに対して、要求パラメータを設定するためにset Entityメソッドを呼び出すこともできます.
4. HttpClientオブジェクトのexecuteを呼び出して要求を送ります.この方法はHttpRequest requestを返します.
5. HttpResonseを呼び出すgetAllHeaders()、getHeaders(String name)などの方法でサーバの応答ヘッダを取得することができます.HttpResonseを呼び出したget Entityメソッドは、サーバの応答内容を包装したHttp Entityオブジェクトを取得することができます.プログラムは、そのオブジェクトを介してサーバの応答内容を取得することができます.
6. 接続を解除します.実行方法が成功するかどうかにかかわらず、接続を解除しなければならない.
四、実例
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.apache.rocketmq.common.utils.HttpTinyClient;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class RequestClientInterface {
private CloseableHttpClient httpClient;
public RequestClientInterface() {
// 1 HttpClinet,
this.httpClient = HttpClients.createDefault();
}
/**
* post (application/json)
*/
public HttpTinyClient.HttpResult doPost(String url, Map map) throws Exception {
// httpPost
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader("Content-Type","application/json");
// map
if (map != null) {
// List
List params = new ArrayList();
// map, list
for (Map.Entry entry : map.entrySet()) {
params.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
}
// form
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params, "utf-8");
formEntity.setContentType("Content-Type:application/json");
// httpPost
httpPost.setEntity(formEntity);
}
// HttpClient , response
CloseableHttpResponse response = this.httpClient.execute(httpPost);
// response httpResult
HttpTinyClient.HttpResult httpResult = null;
if (response.getEntity() != null) {
httpResult = new HttpTinyClient.HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString(response.getEntity(), "UTF-8"));
} else {
httpResult = new HttpTinyClient.HttpResult(response.getStatusLine().getStatusCode(), "");
}
//
response.close();
//
return httpResult;
}
/**
* post (application/x-www-form-urlencoded)
*/
public String doPostWithJson(String urlAddress, Map map) throws Exception {
//
URL url = new URL(urlAddress);
//
StringBuilder postData = new StringBuilder();
for (Map.Entry param : map.entrySet()) {
if (postData.length() != 0) postData.append('&');
postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
postData.append('=');
postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
}
byte[] postDataBytes = postData.toString().getBytes("UTF-8");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
conn.setDoOutput(true);
conn.getOutputStream().write(postDataBytes);
Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
StringBuilder sb = new StringBuilder();
for (int c; (c = in.read()) >= 0; )
sb.append((char) c);
String response = sb.toString();
return response;
}
}