All Projects → kevinsawicki → Http Request

kevinsawicki / Http Request

Licence: mit
Java HTTP Request Library

Programming Languages

java
68154 projects - #9 most used programming language
HTML
75241 projects
CSS
56736 projects

Projects that are alternatives of or similar to Http Request

axios-for-observable
A RxJS wrapper for axios, same api as axios absolutely
Stars: ✭ 13 (-99.6%)
Mutual labels:  http-client
Beast
HTTP and WebSocket built on Boost.Asio in C++11
Stars: ✭ 3,241 (-0.18%)
Mutual labels:  http-client
Http.fs
A simple, functional HTTP client library for F#
Stars: ✭ 295 (-90.91%)
Mutual labels:  http-client
Dubbogo
a golang micro-service framework compatible with alibaba dubbo
Stars: ✭ 258 (-92.05%)
Mutual labels:  http-client
Requester
Powerful, modern HTTP/REST client built on top of the Requests library
Stars: ✭ 273 (-91.59%)
Mutual labels:  http-client
Insomnia
The open-source, cross-platform API client for GraphQL, REST, and gRPC.
Stars: ✭ 18,969 (+484.2%)
Mutual labels:  http-client
AbacusUtil
Release the power in Java programming
Stars: ✭ 77 (-97.63%)
Mutual labels:  http-client
Jetty.project
Eclipse Jetty® - Web Container & Clients - supports HTTP/2, HTTP/1.1, HTTP/1.0, websocket, servlets, and more
Stars: ✭ 3,260 (+0.4%)
Mutual labels:  http-client
Firefly
Firefly is an asynchronous web framework for rapid development of high-performance web application.
Stars: ✭ 277 (-91.47%)
Mutual labels:  http-client
Martian
The HTTP abstraction library for Clojure/script, supporting Swagger, Schema, re-frame and more
Stars: ✭ 294 (-90.95%)
Mutual labels:  http-client
Php Curl Class
PHP Curl Class makes it easy to send HTTP requests and integrate with web APIs
Stars: ✭ 2,903 (-10.59%)
Mutual labels:  http-client
Fusillade
An opinionated HTTP library for Mobile Development
Stars: ✭ 269 (-91.72%)
Mutual labels:  http-client
Armeria
Your go-to microservice framework for any situation, from the creator of Netty et al. You can build any type of microservice leveraging your favorite technologies, including gRPC, Thrift, Kotlin, Retrofit, Reactive Streams, Spring Boot and Dropwizard.
Stars: ✭ 3,392 (+4.47%)
Mutual labels:  http-client
roast.vim
An HTTP client for Vim, that can also be used as a REST client.
Stars: ✭ 78 (-97.6%)
Mutual labels:  http-client
Netty Http Client
An asynchronous http client in Java, with a clean, callback-based API, using Netty 4.x
Stars: ✭ 295 (-90.91%)
Mutual labels:  http-client
electron-request
Zero-dependency, Lightweight HTTP request client for Electron or Node.js
Stars: ✭ 45 (-98.61%)
Mutual labels:  http-client
Req
Easy-to-use, type-safe, expandable, high-level HTTP client library
Stars: ✭ 282 (-91.32%)
Mutual labels:  http-client
Gretchen
Making fetch happen in TypeScript.
Stars: ✭ 301 (-90.73%)
Mutual labels:  http-client
Voterobot
微信朋友圈投票活动的“刷票”案例分析。
Stars: ✭ 297 (-90.85%)
Mutual labels:  http-client
Atom
Java course materials
Stars: ✭ 293 (-90.98%)
Mutual labels:  http-client

Http Request Build Status

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].