HttpURLConnection을 사용하여 요청하고 응답에 액세스하기 위한 간단한 편의 라이브러리입니다.
이 라이브러리는 MIT 라이선스에 따라 사용할 수 있습니다.
http-request 라이브러리는 Maven Central에서 사용할 수 있습니다.
< dependency >
< groupId >com.github.kevinsawicki</ groupId >
< artifactId >http-request</ artifactId >
< version >6.0</ version >
</ dependency >
메이븐을 사용하지 않나요? 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 );
}
});