Http Request


Source link: https://github.com/kevinsawicki/http-request

Http Request

A simple convenience library for using a HttpURLConnection to make requests and access the response.

This library is available under the MIT License.

Usage

The http-request library is available from Maven Central.

<dependency>
<groupId>com.github.kevinsawicki</groupId>
<artifactId>http-request</artifactId>
<version>6.0</version> </dependency>

Not using Maven? Simply copy the HttpRequest class into your project, update the package declaration, and you are good to go.

Javadocs are available here.

FAQ

Who uses this?

See here for a list of known projects using this library.

Why was this written?

This library was written to make HTTP requests simple and easy when using a HttpURLConnection.

Libraries like Apache HttpComponents are great but sometimes for either simplicity, or perhaps for the environment you are deploying to (Android), you just want to use a good old-fashioned HttpURLConnection. This library seeks to add convenience and common patterns to the act of making HTTP requests such as a fluid-interface for building requests and support for features such as multipart requests.

Bottom line: The single goal of this library is to improve the usability of the HttpURLConnection class.

What are the dependencies?

None. The goal of this library is to be a single class class with some inner static classes. The test project does require Jetty in order to test requests against an actual HTTP server implementation.

How are exceptions managed?

The HttpRequest class does not throw any checked exceptions, instead all low-level exceptions are wrapped up in a HttpRequestException which extends RuntimeException. You can access the underlying exception by catching HttpRequestException and calling getCause() which will always return the original IOException.

Are requests asynchronous?

No. The underlying HttpUrlConnection object that each HttpRequest object wraps has a synchronous API and therefore all methods on HttpRequest are also synchronous.

Therefore it is important to not use an HttpRequest object on the main thread of your application.

Here is a simple Android example of using it from an 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");

Examples

Perform a GET request and get the status of the response

int response = HttpRequest.get("http://google.com").code();

Perform a GET request and get the body of the response

String response = HttpRequest.get("http://google.com").body();
 System.out.println("Response was: " + response);

Print the response of a GET request to standard out

HttpRequest.get("http://google.com").receive(System.out);

Adding query parameters

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

Using arrays as query parameters

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

Working with request/response headers

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);

Perform a POST request with some data and get the status of the response

int response = HttpRequest.post("http://google.com").send("name=kevin").code();

Authenticate using Basic authentication

int response = HttpRequest.get("http://google.com").basic("username", "p4ssw0rd").code();

Perform a multipart POST request

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");

Perform a POST request with form data

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");

Copy body of response to a file

File output = new File("/output/request.out");
 HttpRequest.get("http://google.com").receive(output);

Post contents of a file

File input = new File("/input/data.txt");
 int response = HttpRequest.post("http://google.com").send(input).code();

Using entity tags for caching

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();

Using gzip compression

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);

Ignoring security when using HTTPS

HttpRequest request = HttpRequest.get("https://google.com");
 //Accept all certificates request.trustAllCerts();
 //Accept all hostnames request.trustAllHosts();

Configuring an HTTP proxy

HttpRequest request = HttpRequest.get("https://google.com");
 //Configure proxy request.useProxy("localhost", 8080);
 //Optional proxy basic authentication request.proxyBasic("username", "p4ssw0rd");

Following redirects

int code = HttpRequest.get("http://google.com").followRedirects(true).code();

Custom connection factory

Looking to use this library with OkHttp? Read here.

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);

}
 
}
);

Contributors

Resources

FragmentMaster is a library allows you easily develop an Android application which only navigated by Fragments.

Features:

  • Pass data and receive result between two fragments.
  • Swipe right to navigate back.
  • Custom transform animation.

ScrollableItemList is an Android RecyclerView List with items that can scroll to reveal more content on the side.

Grab'n Run (aka GNR) is a simple and effective Java Library that you can easily add to your Android projects to perform secure dynamic class loading operations.

An Android custom ListView that implements multiple columns and variable sized elements.

A tiny library that assists in saving and restoring objects to and from disk using RxJava on Android.

Android 9-patch shadow generator.

Topics


2D Engines   3D Engines   9-Patch   Action Bars   Activities   ADB   Advertisements   Analytics   Animations   ANR   AOP   API   APK   APT   Architecture   Audio   Autocomplete   Background Processing   Backward Compatibility   Badges   Bar Codes   Benchmarking   Bitmaps   Bluetooth   Blur Effects   Bread Crumbs   BRMS   Browser Extensions   Build Systems   Bundles   Buttons   Caching   Camera   Canvas   Cards   Carousels   Changelog   Checkboxes   Cloud Storages   Color Analysis   Color Pickers   Colors   Comet/Push   Compass Sensors   Conferences   Content Providers   Continuous Integration   Crash Reports   Credit Cards   Credits   CSV   Curl/Flip   Data Binding   Data Generators   Data Structures   Database   Database Browsers   Date &   Debugging   Decompilers   Deep Links   Dependency Injections   Design   Design Patterns   Dex   Dialogs   Distributed Computing   Distribution Platforms   Download Managers   Drawables   Emoji   Emulators   EPUB   Equalizers &   Event Buses   Exception Handling   Face Recognition   Feedback &   File System   File/Directory   Fingerprint   Floating Action   Fonts   Forms   Fragments   FRP   FSM   Functional Programming   Gamepads   Games   Geocaching   Gestures   GIF   Glow Pad   Gradle Plugins   Graphics   Grid Views   Highlighting   HTML   HTTP Mocking   Icons   IDE   IDE Plugins   Image Croppers   Image Loaders   Image Pickers   Image Processing   Image Views   Instrumentation   Intents   Job Schedulers   JSON   Keyboard   Kotlin   Layouts   Library Demos   List View   List Views   Localization   Location   Lock Patterns   Logcat   Logging   Mails   Maps   Markdown   Mathematics   Maven Plugins   MBaaS   Media   Menus   Messaging   MIME   Mobile Web   Native Image   Navigation   NDK   Networking   NFC   NoSQL   Number Pickers   OAuth   Object Mocking   OCR Engines   OpenGL   ORM   Other Pickers   Parallax List   Parcelables   Particle Systems   Password Inputs   PDF   Permissions   Physics Engines   Platforms   Plugin Frameworks   Preferences   Progress Indicators   ProGuard   Properties   Protocol Buffer   Pull To   Purchases   Push/Pull   QR Codes   Quick Return   Radio Buttons   Range Bars   Ratings   Recycler Views   Resources   REST   Ripple Effects   RSS   Screenshots   Scripting   Scroll Views   SDK   Search Inputs   Security   Sensors   Services   Showcase Views   Signatures   Sliding Panels   Snackbars   SOAP   Social Networks   Spannable   Spinners   Splash Screens   SSH   Static Analysis   Status Bars   Styling   SVG   System   Tags   Task Managers   TDD &   Template Engines   Testing   Testing Tools   Text Formatting   Text Views   Text Watchers   Text-to   Toasts   Toolkits For   Tools   Tooltips   Trainings   TV   Twitter   Updaters   USB   User Stories   Utils   Validation   Video   View Adapters   View Pagers   Views   Watch Face   Wearable Data   Wearables   Weather   Web Tools   Web Views   WebRTC   WebSockets   Wheel Widgets   Wi-Fi   Widgets   Windows   Wizards   XML   XMPP   YAML   ZIP Codes