HttpURLConnection を使用してリクエストを作成し、レスポンスにアクセスするためのシンプルな便利なライブラリ。
このライブラリは、MIT ライセンスの下で利用できます。
http-request ライブラリは Maven Central から入手できます。
< dependency >
< groupId >com.github.kevinsawicki</ groupId >
< artifactId >http-request</ artifactId >
< version >6.0</ version >
</ dependency >
Maven を使用していませんか? HttpRequest クラスをプロジェクトにコピーし、パッケージ宣言を更新するだけで準備完了です。
Javadoc はここから入手できます。
このライブラリを使用する既知のプロジェクトのリストについては、ここを参照してください。
このライブラリは、 HttpURLConnection
使用する場合に HTTP リクエストをシンプルかつ簡単にするために作成されました。
Apache HttpComponents のようなライブラリは優れていますが、単純化のため、または展開先の環境 (Android) のために、古き良きHttpURLConnection
使用したい場合があります。このライブラリは、リクエストを構築するための流体インターフェイスやマルチパート リクエストなどの機能のサポートなど、HTTP リクエストを作成する行為に利便性と共通のパターンを追加することを目指しています。
結論:このライブラリの唯一の目標は、 HttpURLConnection
クラスの使いやすさを向上させることです。
なし。このライブラリの目標は、いくつかの内部静的クラスを持つ単一のクラスになることです。テスト プロジェクトでは、実際の HTTP サーバー実装に対してリクエストをテストするために Jetty が必要です。
HttpRequest
クラスはチェック例外をスローしません。代わりに、すべての低レベル例外がRuntimeException
拡張するHttpRequestException
にラップされます。 HttpRequestException
をキャッチし、常に元のIOException
返すgetCause()
を呼び出すことで、基になる例外にアクセスできます。
いいえ。各HttpRequest
オブジェクトがラップする基礎となるHttpUrlConnection
オブジェクトには同期 API があるため、 HttpRequest
のすべてのメソッドも同期します。
したがって、アプリケーションのメインスレッドではHttpRequest
オブジェクトを使用しないことが重要です。
これを AsyncTask から使用する簡単な Android の例を次に示します。
private class DownloadTask extends AsyncTask < String , Long , File > {
protected File doInBackground ( String ... urls ) {
try {
HttpRequest request = HttpRequest . get ( urls [ 0 ]);
File file = null ;
if ( request . ok ()) {
file = File . createTempFile ( "download" , ".tmp" );
request . receive ( file );
publishProgress ( file . length ());
}
return file ;
} catch ( HttpRequestException exception ) {
return null ;
}
}
protected void onProgressUpdate ( Long ... progress ) {
Log . d ( "MyApp" , "Downloaded bytes: " + progress [ 0 ]);
}
protected void onPostExecute ( File file ) {
if ( file != null )
Log . d ( "MyApp" , "Downloaded file to: " + file . getAbsolutePath ());
else
Log . d ( "MyApp" , "Download failed" );
}
}
new DownloadTask (). execute ( "http://google.com" );
int response = HttpRequest . get ( "http://google.com" ). code ();
String response = HttpRequest . get ( "http://google.com" ). body ();
System . out . println ( "Response was: " + response );
HttpRequest . get ( "http://google.com" ). receive ( System . out );
HttpRequest request = HttpRequest . get ( "http://google.com" , true , 'q' , "baseball gloves" , "size" , 100 );
System . out . println ( request . toString ()); // GET http://google.com?q=baseball%20gloves&size=100
int [] ids = new int [] { 22 , 23 };
HttpRequest request = HttpRequest . get ( "http://google.com" , true , "id" , ids );
System . out . println ( request . toString ()); // GET http://google.com?id[]=22&id[]=23
String contentType = HttpRequest . get ( "http://google.com" )
. accept ( "application/json" ) //Sets request header
. contentType (); //Gets response header
System . out . println ( "Response content type was " + contentType );
int response = HttpRequest . post ( "http://google.com" ). send ( "name=kevin" ). code ();
int response = HttpRequest . get ( "http://google.com" ). basic ( "username" , "p4ssw0rd" ). code ();
HttpRequest request = HttpRequest . post ( "http://google.com" );
request . part ( "status[body]" , "Making a multipart request" );
request . part ( "status[image]" , new File ( "/home/kevin/Pictures/ide.png" ));
if ( request . ok ())
System . out . println ( "Status was updated" );
Map < String , String > data = new HashMap < String , String >();
data . put ( "user" , "A User" );
data . put ( "state" , "CA" );
if ( HttpRequest . post ( "http://google.com" ). form ( data ). created ())
System . out . println ( "User was created" );
File output = new File ( "/output/request.out" );
HttpRequest . get ( "http://google.com" ). receive ( output );
File input = new File ( "/input/data.txt" );
int response = HttpRequest . post ( "http://google.com" ). send ( input ). code ();
File latest = new File ( "/data/cache.json" );
HttpRequest request = HttpRequest . get ( "http://google.com" );
//Copy response to file
request . receive ( latest );
//Store eTag of response
String eTag = request . eTag ();
//Later on check if changes exist
boolean unchanged = HttpRequest . get ( "http://google.com" )
. ifNoneMatch ( eTag )
. notModified ();
HttpRequest request = HttpRequest . get ( "http://google.com" );
//Tell server to gzip response and automatically uncompress
request . acceptGzipEncoding (). uncompress ( true );
String uncompressed = request . body ();
System . out . println ( "Uncompressed response is: " + uncompressed );
HttpRequest request = HttpRequest . get ( "https://google.com" );
//Accept all certificates
request . trustAllCerts ();
//Accept all hostnames
request . trustAllHosts ();
HttpRequest request = HttpRequest . get ( "https://google.com" );
//Configure proxy
request . useProxy ( "localhost" , 8080 );
//Optional proxy basic authentication
request . proxyBasic ( "username" , "p4ssw0rd" );
int code = HttpRequest . get ( "http://google.com" ). followRedirects ( true ). code ();
このライブラリを OkHttp で使用したいですか?ここをお読みください。
HttpRequest . setConnectionFactory ( new ConnectionFactory () {
public HttpURLConnection create ( URL url ) throws IOException {
if (! "https" . equals ( url . getProtocol ()))
throw new IOException ( "Only secure requests are allowed" );
return ( HttpURLConnection ) url . openConnection ();
}
public HttpURLConnection create ( URL url , Proxy proxy ) throws IOException {
if (! "https" . equals ( url . getProtocol ()))
throw new IOException ( "Only secure requests are allowed" );
return ( HttpURLConnection ) url . openConnection ( proxy );
}
});