Une bibliothèque simple et pratique pour utiliser HttpURLConnection pour effectuer des requêtes et accéder à la réponse.
Cette bibliothèque est disponible sous la licence MIT.
La bibliothèque http-request est disponible sur Maven Central.
< dependency >
< groupId >com.github.kevinsawicki</ groupId >
< artifactId >http-request</ artifactId >
< version >6.0</ version >
</ dependency >
Vous n'utilisez pas Maven ? Copiez simplement la classe HttpRequest dans votre projet, mettez à jour la déclaration du package et vous êtes prêt à partir.
Les Javadocs sont disponibles ici.
Voir ici pour une liste des projets connus utilisant cette bibliothèque.
Cette bibliothèque a été écrite pour rendre les requêtes HTTP simples et faciles lors de l'utilisation d'un HttpURLConnection
.
Les bibliothèques comme Apache HttpComponents sont excellentes, mais parfois, pour des raisons de simplicité ou peut-être pour l'environnement dans lequel vous déployez (Android), vous souhaitez simplement utiliser un bon vieux HttpURLConnection
. Cette bibliothèque cherche à ajouter de la commodité et des modèles communs à l'acte de faire des requêtes HTTP, comme une interface fluide pour la création de requêtes et la prise en charge de fonctionnalités telles que les requêtes en plusieurs parties.
Conclusion : le seul objectif de cette bibliothèque est d'améliorer la convivialité de la classe HttpURLConnection
.
Aucun . Le but de cette bibliothèque est d’être une classe unique avec quelques classes statiques internes. Le projet de test nécessite Jetty pour tester les requêtes par rapport à une implémentation réelle du serveur HTTP.
La classe HttpRequest
ne génère aucune exception vérifiée, mais toutes les exceptions de bas niveau sont enveloppées dans une HttpRequestException
qui étend RuntimeException
. Vous pouvez accéder à l'exception sous-jacente en interceptant HttpRequestException
et en appelant getCause()
qui renverra toujours l' IOException
d'origine.
Non . L'objet HttpUrlConnection
sous-jacent que chaque objet HttpRequest
encapsule possède une API synchrone et donc toutes les méthodes sur HttpRequest
sont également synchrones.
Il est donc important de ne pas utiliser d'objet HttpRequest
sur le thread principal de votre application.
Voici un exemple Android simple d'utilisation à partir d'une AsyncTask :
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 ();
Vous cherchez à utiliser cette bibliothèque avec OkHttp ? Lisez ici.
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 );
}
});