Eine einfache praktische Bibliothek zur Verwendung einer HttpURLConnection, um Anfragen zu stellen und auf die Antwort zuzugreifen.
Diese Bibliothek ist unter der MIT-Lizenz verfügbar.
Die http-request-Bibliothek ist bei Maven Central verfügbar.
< dependency >
< groupId >com.github.kevinsawicki</ groupId >
< artifactId >http-request</ artifactId >
< version >6.0</ version >
</ dependency >
Sie verwenden Maven nicht? Kopieren Sie einfach die HttpRequest-Klasse in Ihr Projekt, aktualisieren Sie die Paketdeklaration und schon kann es losgehen.
Javadocs sind hier verfügbar.
Hier finden Sie eine Liste bekannter Projekte, die diese Bibliothek verwenden.
Diese Bibliothek wurde geschrieben, um HTTP-Anfragen bei Verwendung einer HttpURLConnection
einfach und unkompliziert zu gestalten.
Bibliotheken wie Apache HttpComponents sind großartig, aber manchmal möchten Sie der Einfachheit halber oder vielleicht auch für die Umgebung, in der Sie die Bereitstellung durchführen (Android), einfach eine gute, altmodische HttpURLConnection
verwenden. Ziel dieser Bibliothek ist es, dem Vorgang des Sendens von HTTP-Anfragen mehr Komfort und allgemeine Muster zu verleihen, beispielsweise eine flüssige Schnittstelle zum Erstellen von Anfragen und Unterstützung für Funktionen wie mehrteilige Anfragen.
Fazit: Das einzige Ziel dieser Bibliothek besteht darin, die Benutzerfreundlichkeit der HttpURLConnection
-Klasse zu verbessern.
Keine . Das Ziel dieser Bibliothek besteht darin, eine einzelne Klassenklasse mit einigen inneren statischen Klassen zu sein. Das Testprojekt erfordert Jetty, um Anfragen anhand einer tatsächlichen HTTP-Serverimplementierung zu testen.
Die HttpRequest
-Klasse löst keine geprüften Ausnahmen aus, stattdessen werden alle Ausnahmen auf niedriger Ebene in eine HttpRequestException
verpackt, die RuntimeException
erweitert. Sie können auf die zugrunde liegende Ausnahme zugreifen, indem Sie HttpRequestException
abfangen und getCause()
aufrufen, wodurch immer die ursprüngliche IOException
zurückgegeben wird.
NEIN . Das zugrunde liegende HttpUrlConnection
Objekt, das jedes HttpRequest
Objekt umschließt, verfügt über eine synchrone API und daher sind alle Methoden in HttpRequest
ebenfalls synchron.
Daher ist es wichtig, kein HttpRequest
Objekt im Hauptthread Ihrer Anwendung zu verwenden.
Hier ist ein einfaches Android-Beispiel für die Verwendung aus einer 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 ();
Möchten Sie diese Bibliothek mit OkHttp verwenden? Lesen Sie hier.
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 );
}
});