The easiest HTTP networking library for Kotlin/Android

Overview

Fuel

mavenCentral Build Status Codecov

The easiest HTTP networking library for Kotlin/Android.

You are looking at the documentation for 2.x.y.. If you are looking for the documentation for 1.x.y, checkout the 1.16.0 README.md

Features

  • HTTP GET/POST/PUT/DELETE/HEAD/PATCH requests in a fluent style interface
  • Asynchronous and blocking requests
  • Download as a file
  • Upload files, Blobs, DataParts as multipart/form-data
  • Cancel asynchronous request
  • Debug logging / convert to cUrl call
  • Deserialization into POJO / POKO
  • Requests as coroutines
  • API Routing

Installation

We offer maven and jitpack installations. Maven via bintray only has stable releases but jitpack can be used to build any branch, commit and version.

Maven

You can download and install Fuel with Maven and Gradle. The core package has the following dependencies:

  //core
  implementation 'com.github.kittinunf.fuel:fuel:<latest-version>'
  
  //packages
  implementation 'com.github.kittinunf.fuel:<package>:<latest-version>'

Make sure to include mavenCentral() in your repositories (jcenter() is deprecated, new releases starting from 2.2.3 are hosted on mavenCentral())

repositories {
  mavenCentral()
}

Each of the extensions / integrations has to be installed separately.

Package Description
fuel Core package
fuel-android Android: Automatically invoke handler on Main Thread when using Android Module
fuel-coroutines KotlinX: Execution with coroutines
fuel-forge Deserialization: Forge
fuel-gson (De)serialization: Gson
fuel-jackson Deserialization: Jackson
fuel-json Deserialization: Json
fuel-kotlinx-serialization (De)serialization: KotlinX Serialization
fuel-livedata Android Architectures: Responses as LiveData
fuel-moshi Deserialization: Moshi
fuel-reactor Reactive Programming: Responses as Mono (Project Reactor 3.x)
fuel-rxjava Reactive Programming: Responses as Single (RxJava 2.x)
fuel-stetho Utility: Debug utility for Android on Chrome Developer Tools, Stetho

Jitpack

If you want a SNAPSHOT distribution, you can use Jitpack

repositories {
  maven(url = "https://www.jitpack.io") {
    name = "jitpack"
  }
}

dependencies {
  //core
  implementation(group = "com.github.kittinunf.fuel", name = "fuel", version = "-SNAPSHOT")
  
  //packages
  // replace <package> with the package name e.g. fuel-coroutines
  implementation(group = "com.github.kittinunf.fuel", name = "<package>", version = "-SNAPSHOT")
}

or

dependencies {
  //core and/or packages
  // replace <package> with the package name e.g. fuel-coroutines
  listof("fuel", "<package>").forEach {
    implementation(group = "com.github.kittinunf.fuel", name = it, version = "-SNAPSHOT")
  }
}

Configuration

  • group is made up of com.github as well as username and project name

  • name is the subproject, this may be any of the packages listed in the installation instructions eg. fuel, fuel-coroutines, fuel-kotlinx-serialization, etc

  • version can be the latest master-SMAPSHOT or -SNAPSHOT which always points at the HEAD or any other branch, tag or commit hash, e.g. as listed on jitpack.io.

We recommend not using SNAPSHOT builds, but a specific commit in a specific branch (like a commit on master), because your build will then be stable.

Build time-out

Have patience when updating the version of fuel or building for the first time as jitpack will build it, and this may cause the request to jitpack to time out. Wait a few minutes and try again (or check the status on jitpack).

NOTE: do not forget to add the kotlinx repository when using coroutines or serialization

Forks

Jitpack.io also allows to build from fuel forks. If a fork's username is $yourname,

  • adjust group to com.github.$yourName.fuel
  • and look for version on https://jitpack.io/#$yourName/Fuel

Quick start

Fuel requests can be made on the Fuel namespace object, any FuelManager or using one of the String extension methods. If you specify a callback the call is async, if you don't it's blocking.

Async Usage Example

import com.github.kittinunf.fuel.httpGet
import com.github.kittinunf.result.Result

fun main(args: Array<String>) {

    val httpAsync = "https://httpbin.org/get"
        .httpGet()
        .responseString { request, response, result ->
            when (result) {
                is Result.Failure -> {
                    val ex = result.getException()
                    println(ex)
                }
                is Result.Success -> {
                    val data = result.get()
                    println(data)
                }
            }
        }

    httpAsync.join()
}

Blocking Usage Example

import com.github.kittinunf.fuel.httpGet
import com.github.kittinunf.result.Result;

fun main(args: Array<String>) {

    val (request, response, result) = "https://httpbin.org/get"
        .httpGet()
        .responseString()

    when (result) {
        is Result.Failure -> {
            val ex = result.getException()
            println(ex)
        }
        is Result.Success -> {
            val data = result.get()
            println(data)
        }
    }

}

// You can also use Fuel.get("https://httpbin.org/get").responseString { ... }
// You can also use FuelManager.instance.get("...").responseString { ... }

Fuel and the extension methods use the FuelManager.instance under the hood. You can use this FuelManager to change the default behaviour of all requests:

FuelManager.instance.basePath = "https://httpbin.org"

"/get"
  .httpGet()
  .responseString { request, response, result -> /*...*/ }
// This is a GET request to "https://httpbin.org/get"

Detailed usage

Check each of the packages documentations or the Wiki for more features, usages and examples. Are you looking for basic usage on how to set headers, authentication, request bodies and more? fuel: Basic usage is all you need.

Basic functionality

Responses

(De)serialization

Utility

Other libraries

If you like Fuel, you might also like other libraries of mine;

  • Result - The modelling for success/failure of operations in Kotlin
  • Fuse - A simple generic LRU memory/disk cache for Android written in Kotlin
  • Forge - Functional style JSON parsing written in Kotlin
  • ReactiveAndroid - Reactive events and properties with RxJava for Android SDK

Credits

Fuel is brought to you by contributors.

Licenses

Fuel is released under the MIT license.

Comments
  • Add suspending implenetation client

    Add suspending implenetation client

    Description

    In this pr I am hoping to create a suspending implementation of the httpClient so that, should a user so wish they could avoid using threads.

    Huge thank you/love/creative respect/kudos must go to both @iNoles, @lucasvalenteds and @SleeplessByte who all helped me get this running at points I was completely stuck

    Fixes #431

    Check all that apply

    • [x] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] Refactoring (change which changes the current internal or external interface)
    • [x] This change requires a documentation update

    How Has This Been Tested?

    This pr changes the implementation but the test remain the same as the object was not change the behaviour

    Checklist:

    • [x] I have performed a self-review of my own code
    • [x] I have commented my code, particularly in hard-to-understand areas
    • [ ] I have made corresponding changes to the documentation, if necessary
    • [x] My changes generate no new compiler warnings
    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [x] New and existing unit tests pass locally with my changes
    :bug: bug Kotlin 1.3 
    opened by markGilchrist 51
  • Some Async Coroutine Functions

    Some Async Coroutine Functions

    Thank you for submitting your Pull Request. Please make sure you have familiarised yourself with the Contributing Guidelines before continuing.

    Description

    I added async block for some functions and left blocking one alone. I was a bit curious why somebody else didn't added this one.

    Fixes #429

    Type of change

    Check all that apply

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] Refactoring (change which changes the current internal or external interface)
    • [ ] This change requires a documentation update

    How Has This Been Tested?

    In case you did not include tests describe why you and how you have verified the changes, with instructions so we can reproduce. If you have added comprehensive tests for your changes, you may ommit this section.

    Checklist:

    • [x] I have performed a self-review of my own code
    • [ ] I have commented my code, particularly in hard-to-understand areas
    • [ ] I have made corresponding changes to the documentation, if necessary
    • [x] My changes generate no new compiler warnings
    • [x] I have added tests that prove my fix is effective or that my feature works
    • [x] New and existing unit tests pass locally with my changes
    :warning: work in progress 
    opened by iNoles 24
  • Out of memory when downloading file.

    Out of memory when downloading file.

    When i download a big file I am getting an out of memory error in Android. If the file is small there is no problem.

    Maybe it can be related to this.

    Out of memory error or this Out of memory error 2

    opened by Yayo-Arellano 22
  • [fuel-jackson] Add Request.body(any: Any) extension method

    [fuel-jackson] Add Request.body(any: Any) extension method

    I'd like to be able to make requests like this:

     val (request, response, result) = Fuel.post(url)
                .body(MyCustomRequestBodyObject(...)) // here
                .responseObject<MyCustomResponseBodyObject>()
    

    Currently I have an extension method in my project which allows this:

    fun Request.body(any: Any) = body(mapper...)
    

    Would be nice if this was a part of the fuel-jackson module.

    opened by david-wg2 18
  • Add HTTP status code 303 as valid redirect

    Add HTTP status code 303 as valid redirect

    Currently Fuel handles HTTP Status Code 303 as an error. It should be handled as a redirect though: https://en.wikipedia.org/wiki/HTTP_303 https://httpstatuses.com/303

    opened by ParkerK 18
  • [Release] New Version 1.16.0

    [Release] New Version 1.16.0

    Description

    This PR aims to release Fuel new version 1.16.0. This will target Kotlin 1.3 with new coroutine.

    Type of change

    Check all that apply

    • [x] Release new version

    How Has This Been Tested?

    Checklist:

    • [x] I have performed a self-review of my own code
    :notebook: chore 
    opened by kittinunf 17
  • #246, #168: Add Kotlin Coroutines support

    #246, #168: Add Kotlin Coroutines support

    This pull requests adds some suspend functions to the Request class. They were added in a new module called fuel-coroutines and are intended to allows the developers to avoid callbacks while using asynchronous calls.

    opened by lucasvalenteds 17
  • :sparkles: [core] PATCH without http-method-override header

    :sparkles: [core] PATCH without http-method-override header

    Description

    This PR allows PATCH requests to be made without a http-method-override header

    Type of change

    Check all that apply

    • [ ] Bug fix (a non-breaking change which fixes an issue)
    • [x] New feature (a non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] Refactoring (a change which changes the current internal or external interface)
    • [ ] This change requires a documentation update

    How Has This Been Tested?

    In case you did not include tests describe why you and how you have verified the changes, with instructions so we can reproduce. If you have added comprehensive tests for your changes, you may omit this section.

    I have not created tests to verify that this PR is working, however I have modified the sample android app and I can confirm that a patch request is working with httpbin.org. If a test case is required then I'm willing to add one (might need some help with this)

    Checklist:

    • [x] I have performed a self-review of my own code
    • [x] I have commented my code, particularly in hard-to-understand areas
    • [ ] I have made corresponding changes to the documentation, if necessary
    • [ ] My changes generate no new compiler warnings
    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] New and existing unit tests pass locally with my changes
    • [ ] Inspect the bytecode viewer, including reasoning why
    :unicorn: enhancement :boom: breaking change 
    opened by bb441db 16
  • Add reviewdog to bark at our violations

    Add reviewdog to bark at our violations

    Description

    This PR adds review dog to travis CI. It is a continuation over #476. So, it can report our violations at the line they occurs.

    Type of change

    Check all that apply

    • [x] Linter support

    How Has This Been Tested?

    In case you did not include tests describe why you and how you have verified the changes, with instructions so we can reproduce. If you have added comprehensive tests for your changes, you may omit this section.

    Checklist:

    • [x] I have performed a self-review of my own code
    • [ ] I have commented my code, particularly in hard-to-understand areas
    • [ ] I have made corresponding changes to the documentation, if necessary
    • [ ] My changes generate no new compiler warnings
    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] New and existing unit tests pass locally with my changes
    • [ ] Inspect the bytecode viewer, including reasoning why
    :unicorn: enhancement :notebook: chore 
    opened by kittinunf 16
  • Migrate Gradle scripts to Kotlin DSL

    Migrate Gradle scripts to Kotlin DSL

    This pull requests rewrites all Gradle build files from Groovy DSL to Kotlin DSL.

    The motivation to change them is to reduce duplication and maintenance effort by declaring versions in a single file and defining common logic in one place, which make them reusable. Better syntax highlight and autocomplete is expected too.

    At the moment, all tests are passing and Android Studio doesn't have any warnings.

    Improvements to make

    • Logic to build Android-based modules are not as reusable as JVM-based modules
    • Make sure publish plugin is working as expected. At the moment Gradle is loggin the warning below.
      Publication release not found in project :fuel-android.
      Publication release not found in project :fuel-livedata
      
    • Gradle found different versions of kotlin-stdlib, but tests are passing. The command below may help to identify them.
      ./gradlew dependencyInsight --configure compile --dependency kotlin-stdlib
      

    I'd love hear some feedback from you about using Kotlin instead of Groovy and also suggestions to improve the build scripts!

    opened by lucasvalenteds 16
  • Cannot access request header fields after connection is set

    Cannot access request header fields after connection is set

    Attempting to execute:

    "http://api.forismatic.com/api/1.0/?method=getQuote&format=json&lang=en".httpGet().response { request, response, result -> 
         println(request)
         println(response)
    }
    

    produces:

    java.lang.IllegalStateException: Cannot access request header fields after connection is set
         at com.github.kittinunf.fuel.toolbox.HttpClient.executeRequest(HttpClient.kt:69)
         at com.github.kittinunf.fuel.core.requests.TaskRequest.call(TaskRequest.kt:16)
         at com.github.kittinunf.fuel.core.requests.AsyncTaskRequest.call(AsyncTaskRequest.kt:13)
         at com.github.kittinunf.fuel.core.requests.AsyncTaskRequest.call(AsyncTaskRequest.kt:6)
         at java.util.concurrent.FutureTask.run(FutureTask.java:237)
         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
         at com.github.kittinunf.fuel.core.FuelManager$executor$2$1$1.run(FuelManager.kt:49)
         at java.lang.Thread.run(Thread.java:761)
    

    Using the cUrlLoggingRequestInterceptor I got the following curl that when executed on a terminal it works:

    curl -i -H "Accept-Encoding:compress;q=0.5, gzip;q=1.0" "http://api.forismatic.com/api/1.0/?method=getQuote&format=json&lang=en"

    :bug: bug 
    opened by mradzinski 16
  • kotlinx-serialization with List<T> throws

    kotlinx-serialization with List throws

    Bug Report

    Description

    Can't make kotlinx-serialization to decode a list of objects from a JSON string. If I use responseString and 'manually' decode from the resulting string, it works.

    To Reproduce

    Steps to reproduce the behavior:

    Below are two blocks of code, first doesn't work, second does.

    @Serializable
    data class Store(val storeID: String)
    
       // does not work
        val (request, response, data) = Fuel.get(address)
            .awaitObjectResponse<List<Store>>(
                kotlinxDeserializerOf()
            )
      // does work
      val httpAsync = Fuel.get(address)
            .responseString { request, response, result ->
                result.fold({ d ->
                        val obj = json.decodeFromString<List<Store>>(d)
                        println(obj[0].name)
                }, { e ->
                    println(e.message)
                })
            }
    

    Expected behavior

    Should deserialize string.

    Actual behavior

    Throws the exception below. Exception stack:

    Exception in thread "main" Expected class kotlinx.serialization.json.JsonObject (Kotlin reflection is not available) as the serialized body of kotlinx.serialization.Polymorphic<List>, but had class kotlinx.serialization.json.JsonArray (Kotlin reflection is not available)
    	com.github.kittinunf.fuel.core.FuelError$Companion.wrap(FuelError.kt:86)
    	com.github.kittinunf.fuel.core.DeserializableKt.awaitResponse(Deserializable.kt:258)
    Caused by: kotlinx.serialization.json.internal.JsonDecodingException: Expected class kotlinx.serialization.json.JsonObject (Kotlin reflection is not available) as the serialized body of kotlinx.serialization.Polymorphic<List>, but had class kotlinx.serialization.json.JsonArray (Kotlin reflection is not available)
    	kotlinx.serialization.json.internal.JsonExceptionsKt.JsonDecodingException(JsonExceptions.kt:24)
    	kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:94)
    	kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:81)
    	kotlinx.serialization.json.Json.decodeFromString(Json.kt:95)
    	MainKt$test$$inlined$kotlinxDeserializerOf$1.deserialize(FuelSerialization.kt:55)
    

    Environment

    IntelliJ IDEA Community

    opened by MihaMarkic 0
  • fuel-kotlinx-serialization mentions awaitResponseObject in docs

    fuel-kotlinx-serialization mentions awaitResponseObject in docs

    Bug Report

    Description

    Docs issue probably. fuel-kotlinx-serialization mentions awaitResponseObject in docs which AFAIK does not exist (anymore?). It's probably awaitObjectResponse.

    To Reproduce

    Steps to reproduce the behavior:

    1. Go to last sample

    Expected behavior

    Docs should suggest awaitObjectResponse instead.

    opened by MihaMarkic 0
  • Body: null when using .jsonBody to POST

    Body: null when using .jsonBody to POST

    I am trying to post data using ".jsonBody" but every time it tries to POST it returns a Body: null. Am I formatting the json incorrectly? Any suggestions?

     var intHR = heartRateBpm.value.toInt()
            data class tobesent(
                var devID: String,
                var currentDB: Float,
                var currentHr: Int,
                var userLatitude: Float,
                var userLongitude: Float,
            )
            val send = tobesent("Andy",0f,intHR,0f,0f)
            Fuel.post("https://smart-sense-dashboard.herokuapp.com/api/sensors/")
                .header(Headers.AUTHORIZATION, "4a16b669-43bc-412a-8dad-18dc7fb199d9")
                .jsonBody(Gson().toJson(send).toString())
                .responseString()
                .also { println(it) }
    
    opened by andrewcihon415 0
  • Is there a place to report security issues?

    Is there a place to report security issues?

    Is there a place to be notified of Fuel security issues? If submitting to issue is not a problem, I will try to describe the Issue directly.

    P.S. A feature called "Privately reporting a security vulnerability" has recently been released by Github, so if enable it and I will contact you from there.

    https://docs.github.com/ja/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability

    opened by motoyasu-saburi 0
  • non-FuelError Exceptions in request interceptors cause casting errors

    non-FuelError Exceptions in request interceptors cause casting errors

    Bug Report

    Description

    When an exception is thrown in a request interceptor, that runtime exception bubbles up until the point that it is assumed (inside of of fuel code) to be a FuelError, is unsafe cast as one, and causes a runtime error at the failed cast.

    To Reproduce

    Simple code to recreate:

    val manager = FuelManager().apply {
        basePath = "https://example.com"
        addRequestInterceptor { { throw RuntimeException("oops") } }
    }
    
    runBlocking {
        manager.get("/").awaitStringResult()
    }
    

    Will throw error:

    class java.lang.RuntimeException cannot be cast to class com.github.kittinunf.fuel.core.FuelError (java.lang.RuntimeException is in module java.base of loader 'bootstrap'; com.github.kittinunf.fuel.core.FuelError is in unnamed module of loader 'app')
    

    Instead of throwing the expected RuntimeException wrapped in a FuelError.

    Expected behavior

    All non-FuelErrors should be wrapped in a FuelError and be handleable as FuelErrors in the request would be, and not have the failed cast.

    Screenshots

    N/A

    Environment

    Development Machine

    • OS: macos and linux
    • IDE: IntelliJ (and running live outside of IDE)
    • Fuel version: 2.3.1
    • Kotlin version: 1.7.10

    Smartphone or Emulator

    N/A

    Additional context

    The error is right here: https://github.com/kittinunf/fuel/blob/105d3111d71623cb831af3f411ea253db766f369/fuel/src/main/kotlin/com/github/kittinunf/fuel/core/requests/SuspendableRequest.kt#L58

    It seems as simple as changing this to:

    .recover {
        if (it is FuelError) Result.Failure(it as FuelError)
        else Result.Failure(FuelError.wrap(it))
    }
    

    However I can't seem to get Fuel building locally because of "SDK location not found" at "build.gradle.kts:130" despite having the same JDK 11 set up that I use for everything else. So either feel free to crib that if it makes sense or any direction on how to set up a local build would be great and I'd put up a PR with a test immediately.

    Thanks!

    opened by jonesetc 0
Releases(2.3.1)
Owner
Kittinun Vantasin
Android/iOS Enthusiast
Kittinun Vantasin
๐Ÿš€ A Complete Fast Android Networking Library that also supports HTTP/2 ๐Ÿš€

Fast Android Networking Library About Fast Android Networking Library Fast Android Networking Library is a powerful library for doing any type of netw

AMIT SHEKHAR 5.5k Jan 3, 2023
Volley is an HTTP library that makes networking for Android apps easier and, most importantly, faster.

Volley Volley is an HTTP library that makes networking for Android apps easier and, most importantly, faster. For more information about Volley and ho

Google 3.3k Jan 1, 2023
Android Easy Http - Simplest android http request library.

Android Easy Http Library ็น้ซ”ไธญๆ–‡ๆ–‡ๆช” About Android Easy Http Library Made on OkHttp. Easy to do http request, just make request and listen for the respons

null 13 Sep 30, 2022
LiteHttp is a simple, intelligent and flexible HTTP framework for Android. With LiteHttp you can make HTTP request with only one line of code! It could convert a java model to the parameter and rander the response JSON as a java model intelligently.

Android network framework: LiteHttp Tags : litehttp2.x-tutorials Website : http://litesuits.com QQgroup : 42960650 , 47357508 Android็ฝ‘็ปœ้€šไฟกไธบๅ•ฅๅญ้€‰ lite-htt

้ฉฌๅคฉๅฎ‡ 829 Dec 29, 2022
Kotlin-echo-client - Echo client using Kotlin with Ktor networking library

Overview This repository contains an echo server implemented with Kotlin and kto

Elliot Barlas 2 Sep 1, 2022
:satellite: [Android Library] Simplified async networking in android

Android library that simplifies networking in android via an async http client. Also featured in [Awesome Android Newsletter #Issue 15 ] Built with โค๏ธŽ

Nishant Srivastava 36 May 14, 2022
Flower - Super cool Android library to manage networking and database caching with ease

Flower Super cool Android library to manage networking and database caching with ease. It allows developers to use remote resources on-the-fly OR Comb

Rajesh Hadiya 192 Dec 26, 2022
Android Asynchronous Networking and Image Loading

Android Asynchronous Networking and Image Loading Download Maven Git Features Kotlin coroutine/suspend support Asynchronously download: Images into Im

Koushik Dutta 6.3k Dec 27, 2022
IceNet - Fast, Simple and Easy Networking for Android

IceNet FAST, SIMPLE, EASY This library is an Android networking wrapper consisting of a combination of Volley, OkHttp and Gson. For more information s

Anton Nurdin Tuhadiansyah 61 Jun 24, 2022
Latihan Networking dengan Retrofit

Latihan-Background-Process-dan-Networking-9 Latihan Networking dengan Retrofit Pada materi kali ini Anda akan belajar menggunakan Retrofit untuk menam

Ubean 0 Nov 25, 2021
HttpMocker is a simple HTTP mocking library written in Kotlin to quickly and easily handle offline modes in your apps

HttpMocker HttpMocker is a very lightweight Kotlin library that allows to mock HTTP calls relying on either OkHttp or the Ktor client libraries. It ca

David Blanc 174 Nov 28, 2022
Kotlin HTTP requests library. Similar to Python requests.

khttp khttp is a simple library for HTTP requests in Kotlin. It functions similarly to Python's requests module. import khttp.get fun main(args: Arra

Anna Clemens 466 Dec 20, 2022
Ktorfit - a HTTP client/Kotlin Symbol Processor for Kotlin Multiplatform (Js, Jvm, Android, iOS, Linux) using KSP and Ktor clients inspired by Retrofit

Ktorfit is a HTTP client/Kotlin Symbol Processor for Kotlin Multiplatform (Js, Jvm, Android, iOS, Linux) using KSP and Ktor clients inspired by Retrofit

Jens Klingenberg 637 Dec 25, 2022
Asynchronous socket, http(s) (client+server) and websocket library for android. Based on nio, not threads.

AndroidAsync AndroidAsync is a low level network protocol library. If you are looking for an easy to use, higher level, Android aware, http request li

Koushik Dutta 7.3k Jan 2, 2023
Asynchronous Http and WebSocket Client library for Java

Async Http Client Follow @AsyncHttpClient on Twitter. The AsyncHttpClient (AHC) library allows Java applications to easily execute HTTP requests and a

AsyncHttpClient 6k Jan 8, 2023
Java HTTP Request Library

Http Request A simple convenience library for using a HttpURLConnection to make requests and access the response. This library is available under the

Kevin Sawicki 3.3k Jan 6, 2023
Unirest in Java: Simplified, lightweight HTTP client library.

Unirest for Java Install With Maven: <!-- Pull in as a traditional dependency --> <dependency> <groupId>com.konghq</groupId> <artifactId>unire

Kong 2.4k Jan 5, 2023
super simple library to manage http requests.

HttpAgent super simple library to manage http requests. Gradle dependencies { implementation 'com.studioidan.httpagent:httpagent:1.0.16@aar' } No

idan ben shimon 32 Oct 24, 2021
Unirest in Java: Simplified, lightweight HTTP client library.

Unirest for Java Install With Maven: <!-- Pull in as a traditional dependency --> <dependency> <groupId>com.konghq</groupId> <artifactId>unire

Kong 2.4k Dec 24, 2022