A Java event based WebSocket and HTTP server

Related tags

HTTP Clients webbit
Overview

Webbit - A Java event based WebSocket and HTTP server

Build Status

Getting it

Prebuilt JARs are available from the central Maven repository or the Sonatype Maven repository.

Alternatively, you can get the latest code from Git and build it yourself:

git clone git://github.com/webbit/webbit.git
cd webbit

Make

Build is done with make. On OS-X and Linux this should work out of the box. On Solaris, use gmake. On Windows you will need Cygwin.

make

Maven

mvn install

Quick start

Start a web server on port 8080 and serve some static files:

WebServer webServer = WebServers.createWebServer(8080)
            .add(new StaticFileHandler("/web")) // path to web content
            .start()
            .get();

That was easy.

Now let's build a WebSocketHandler.

public class HelloWebSockets extends BaseWebSocketHandler {
    private int connectionCount;

    public void onOpen(WebSocketConnection connection) {
        connection.send("Hello! There are " + connectionCount + " other connections active");
        connectionCount++;
    }

    public void onClose(WebSocketConnection connection) {
        connectionCount--;
    }

    public void onMessage(WebSocketConnection connection, String message) {
        connection.send(message.toUpperCase()); // echo back message in upper case
    }

    public static void main(String[] args) {
        WebServer webServer = WebServers.createWebServer(8080)
                .add("/hellowebsocket", new HelloWebSockets())
                .add(new StaticFileHandler("/web"));
        webServer.start();
        System.out.println("Server running at " + webServer.getUri());
    }
}

And a page that uses the WebSocket (web/index.html)

<html>
  <body>

    <!-- Send text to websocket -->
    <input id="userInput" type="text">
    <button onclick="ws.send(document.getElementById('userInput').value)">Send</button>

    <!-- Results -->
    <div id="message"></div>

    <script>
      function showMessage(text) {
        document.getElementById('message').innerHTML = text;
      }

      var ws = new WebSocket('ws://' + document.location.host + '/hellowebsocket');
      showMessage('Connecting...');
      ws.onopen = function() { showMessage('Connected!'); };
      ws.onclose = function() { showMessage('Lost connection'); };
      ws.onmessage = function(msg) { showMessage(msg.data); };
    </script>
  </body>
</html>

Contributing

Running JUnit tests

mvn clean test

or

make clean test

Running Autobahn tests

Autobahn is a WebSocket server implemented in Python that comes with an extensive test suite that can be used to test other WebSocket servers as well.

We're using it to test Webbit.

Installing Autobahn

git submodule update --init

Running Autobahn tests

In shell A:

make echo

In shell B:

make autobahn

Open reports/servers/index.html to see the results.

More

Comments
  • Stop and restart of NettyWebServer throws an IllegalStateException

    Stop and restart of NettyWebServer throws an IllegalStateException

    NettyWebServer: start tries to call bootstrap.setFactory a second time, but that is illegal. Instead move all the code of setting up bootstrap to the start method and in stop set bootstrap to null again.

    NettyWebServerTest: A test is included which does excatly that: start, stop, start, stop of the WebServer

    opened by chtheis 12
  • New 0.4.9 ThreadFactory creating daemon threads

    New 0.4.9 ThreadFactory creating daemon threads

    This came from one of my colleagues. @s1monw any comments?


    42c0fad77794e632a5a4cc69df7f65360460b022

    This change is seemingly harmless in that it is simply adding names to various webbit threads. The problem is that the ThreadFactory implementation is creating daemon threads. For apps that are relying on the webbit threads to be user threads in order to keep the app alive, they will simply exit after calling start.

    I’m pretty sure this is not the intention since every sample creates a WebServer and starts it. To see the behavior, choose any of the webbit sample apps, run it, and observe that it exits out and doesn’t stay alive. Since NamedThreadFactory seems to have been copied from another project, I’m not sure if the proper fix is the flip isDaemon(false) in NamedThreadFactory.newThread(). I suppose we could just remove the “copied from Lucene” comment so there is no confusion. Let me know how we should go about fixing this.

    opened by aslakhellesoy 11
  • Support HTTP partial content ranges

    Support HTTP partial content ranges

    When the browser makes a request specifying the 'Range' header, Webbit should respond with HTTP 206 (Partial Content) instead of HTTP 200 and the appropriate Content-Range and Accept-Ranges headers.

    At the moment, it doesn't and it manifests itself as a weird sound reliability bug. Chrome will make a Range request for specific types of media - such as audio and video. It appears to serve the content correctly, but attempting to play() the media a second time fails. I've verified (using Apache HTTPD) that this is not an issue if HTTP Range is implemented correctly.


    Here's a TCP dump of a conversation between Chrome and the webserver for loading a sound via the

    Webbit:

    GET /foo.wav HTTP/1.1 
    Host: localhost
    Connection: keep-alive
    Cache-Control: max-age=0
    Accept-Encoding: identity;q=1, *;q=0
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.816.0 Safari/535.1
    Accept: */*
    Accept-Language: en-US,en;q=0.8
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
    Range: bytes=0-
    
    HTTP/1.1 200 OK
    Server: Webbit
    Content-Length: 46198
    
    blahblahblah...
    

    Apache:

    GET /foo.wav HTTP/1.1
    Host: localhost
    Connection: keep-alive
    Cache-Control: max-age=0
    Accept-Encoding: identity;q=1, *;q=0
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.816.0 Safari/535.1
    Accept: */*
    Accept-Language: en-US,en;q=0.8 
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
    Range: bytes=0-
    
    HTTP/1.1 206 Partial Content
    Server: Apache-Coyote/1.1
    Accept-Ranges: bytes
    ETag: W/"184364-1320695950000"
    Last-Modified: Mon, 07 Nov 2011 19:59:10 GMT
    Content-Range: bytes 0-184363/184364
    Content-Type: audio/x-wav
    Content-Length: 46198
    Date: Tue, 08 Nov 2011 23:00:47 GMT
    
    blahblahblah...
    
    opened by joewalnes 11
  • Test with Autobahn

    Test with Autobahn

    I have integrated Autobahn's awesome test suite on my master branch. It has 200 test cases, which should help us weed out any bugs in the WebSocket implementation. Instructions about how to set it up and run it is in the README.

    The annoying thing is that the first test fails. (You can run a subset of tests by setting e.g. "cases": ["1.1.2"] in fuzzing_client_spec.json).

    The problem is that the connection is closed immediately after connection - before any messages are received. I'm not sure what's causing this. I was able to run all of the tests agains Jetty without problems.

    Any idea what could be causing this?

    opened by aslakhellesoy 11
  • Compile Errors using webbit-0.4.0-full.jar

    Compile Errors using webbit-0.4.0-full.jar

    Trying to compile the Quick Start WebSocketHandler in the README.md against the webbit-0.4.0-full.jar. Doing the same compile against the webbit-0.3.8-full.jar is OK. In both cases I'm using Oracle's 1.6 JRE in the Eclipse IDE.

    Think the WebSocketHandler example code needs updating for 0.4.0 as there is now an onPing method required and the existing onPong method now uses byte[] instead of String for message.

    Also getting:

    Type mismatch: cannot convert from Future<capture#1-of ? extends > WebServer>to WebServer

    on the code that creates the WebServer.

    Its the Type mismatch that has me completely stuck!!

    opened by philrob 10
  • Sinatra-style fluent interface (was: URI-template support)

    Sinatra-style fluent interface (was: URI-template support)

    Writing RESTful apps with Webbit is rather cumbersome due to the lack of more powerful path match handling.

    The uritemplate spec makes it easier to define parameterised URLs.

    The JAX-RS spec defines a @UriTemplate annotation and a UriBuilder class that understands uri-templates. As with most things coming out of the JCP it is half-baked (UriBuilder is abstract and you have to implement your own, which various projects have done), but it's just too much of a PITA.

    A much simpler and non-intrusive implementation is in the uri-template project on Google Code.

    This pull request is a proof of concept that seems to work well. It will be much easier to use Webbit to build RESTful applications with this in place - much nicer than my webbit-rest project which drags in all that JAX-RS crap.

    Ideally I'd like this to be included in Webbit by default, replacing the java.util.Pattern based PathMatchHandler. If we go down this route we'd have to jarjar the uritemplate jar inside webbit.

    Currently my branch only builds with make since the uritemplate jar is not in any maven repos.

    Let me know what you think.

    HTTP Experiment 
    opened by aslakhellesoy 10
  • attempt to fix tests for Travis

    attempt to fix tests for Travis

    • replace HttpCookie.parse with netty CookieDecoder for jdk6 compatibility
    • increase wait time for timing dependent tests so a slower CI server won't time out
    opened by pk11 9
  • WebServers.createWebServer(port) doesn't stop cleanly

    WebServers.createWebServer(port) doesn't stop cleanly

    If you create a web server via WebServers.createWebServer(port) it does not stop cleanly under some conditions. The one of the auto-created executors is not shut down when stopping.

    opened by navision 8
  • Flash based WebSockets

    Flash based WebSockets

    In lieu of full Socket.IO support (issue 18), at least support Flash based WebSockets, so more browsers can make use of Webbit.

    https://github.com/gimite/web-socket-js

    Although this sounds like it should be a separate project, it may be awkward, because the Flash policy checking mechanism doesn't speak valid HTTP, so it may require the underlying networking code to be changed.

    WebSocket 
    opened by joewalnes 8
  • Restart NettyWebServer

    Restart NettyWebServer

    Shall it be possible to stop and start the Webserver whithout creating a new instance? When I call "stop()" and then "start()" again on NettyWebServer I get an IllegalStateException, because the boostrap object already has a factory. When I change the code and put the setting up of the boostrap object from the constructor to the start method and set boostrap to null in the stop method, it works. At least there are no apparent errors :)

    Christoph

    API 
    opened by chtheis 7
  • Add support for chunked responses

    Add support for chunked responses

    This changeset provides a simple way to implement HTTP streaming.

    About the implementation:

    • HttpResponse#chunked signals that the response is going to be a chunked one (i.e. "Transfer-Encoding: chunked")
    • calling HttpResponse#write afterwards will write chunks to the channel
    • often times streaming is continuous (i.e. response#end never gets called) unless staleConnectionTimeout kicks in
    • however, if response#end does get called, make sure to write a DefaultHttpChunk with 0 byte to the channel to signal the browser that streaming is over
    opened by pk11 6
  • Bump gson from 2.2.4 to 2.8.9

    Bump gson from 2.2.4 to 2.8.9

    Bumps gson from 2.2.4 to 2.8.9.

    Release notes

    Sourced from gson's releases.

    Gson 2.8.9

    • Make OSGi bundle's dependency on sun.misc optional (#1993).
    • Deprecate Gson.excluder() exposing internal Excluder class (#1986).
    • Prevent Java deserialization of internal classes (#1991).
    • Improve number strategy implementation (#1987).
    • Fix LongSerializationPolicy null handling being inconsistent with Gson (#1990).
    • Support arbitrary Number implementation for Object and Number deserialization (#1290).
    • Bump proguard-maven-plugin from 2.4.0 to 2.5.1 (#1980).
    • Don't exclude static local classes (#1969).
    • Fix RuntimeTypeAdapterFactory depending on internal Streams class (#1959).
    • Improve Maven build (#1964).
    • Make dependency on java.sql optional (#1707).

    Gson 2.8.8

    • Fixed issue with recursive types (#1390).
    • Better behaviour with Java 9+ and Unsafe if there is a security manager (#1712).
    • EnumTypeAdapter now works better when ProGuard has obfuscated enum fields (#1495).
    Changelog

    Sourced from gson's changelog.

    Version 2.8.9

    • Make OSGi bundle's dependency on sun.misc optional (#1993).
    • Deprecate Gson.excluder() exposing internal Excluder class (#1986).
    • Prevent Java deserialization of internal classes (#1991).
    • Improve number strategy implementation (#1987).
    • Fix LongSerializationPolicy null handling being inconsistent with Gson (#1990).
    • Support arbitrary Number implementation for Object and Number deserialization (#1290).
    • Bump proguard-maven-plugin from 2.4.0 to 2.5.1 (#1980).
    • Don't exclude static local classes (#1969).
    • Fix RuntimeTypeAdapterFactory depending on internal Streams class (#1959).
    • Improve Maven build (#1964).
    • Make dependency on java.sql optional (#1707).

    Version 2.8.8

    • Fixed issue with recursive types (#1390).
    • Better behaviour with Java 9+ and Unsafe if there is a security manager (#1712).
    • EnumTypeAdapter now works better when ProGuard has obfuscated enum fields (#1495).

    Version 2.8.7

    • Fixed ISO8601UtilsTest failing on systems with UTC+X.
    • Improved javadoc for JsonStreamParser.
    • Updated proguard.cfg (#1693).
    • Fixed IllegalStateException in JsonTreeWriter (#1592).
    • Added JsonArray.isEmpty() (#1640).
    • Added new test cases (#1638).
    • Fixed OSGi metadata generation to work on JavaSE < 9 (#1603).

    Version 2.8.6

    2019-10-04 GitHub Diff

    • Added static methods JsonParser.parseString and JsonParser.parseReader and deprecated instance method JsonParser.parse
    • Java 9 module-info support

    Version 2.8.5

    2018-05-21 GitHub Diff

    • Print Gson version while throwing AssertionError and IllegalArgumentException
    • Moved utils.VersionUtils class to internal.JavaVersion. This is a potential backward incompatible change from 2.8.4
    • Fixed issue google/gson#1310 by supporting Debian Java 9

    Version 2.8.4

    2018-05-01 GitHub Diff

    • Added a new FieldNamingPolicy, LOWER_CASE_WITH_DOTS that mapps JSON name someFieldName to some.field.name
    • Fixed issue google/gson#1305 by removing compile/runtime dependency on sun.misc.Unsafe

    Version 2.8.3

    2018-04-27 GitHub Diff

    • Added a new API, GsonBuilder.newBuilder() that clones the current builder
    • Preserving DateFormatter behavior on JDK 9

    ... (truncated)

    Commits
    • 6a368d8 [maven-release-plugin] prepare release gson-parent-2.8.9
    • ba96d53 Fix missing bounds checks for JsonTreeReader.getPath() (#2001)
    • ca1df7f #1981: Optional OSGi bundle's dependency on sun.misc package (#1993)
    • c54caf3 Deprecate Gson.excluder() exposing internal Excluder class (#1986)
    • e6fae59 Prevent Java deserialization of internal classes (#1991)
    • bda2e3d Improve number strategy implementation (#1987)
    • cd748df Fix LongSerializationPolicy null handling being inconsistent with Gson (#1990)
    • fe30b85 Support arbitrary Number implementation for Object and Number deserialization...
    • 1cc1627 Fix incorrect feature request template label (#1982)
    • 7b9a283 Bump bnd-maven-plugin from 5.3.0 to 6.0.0 (#1985)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump junit from 4.11 to 4.13.1

    Bump junit from 4.11 to 4.13.1

    Bumps junit from 4.11 to 4.13.1.

    Release notes

    Sourced from junit's releases.

    JUnit 4.13.1

    Please refer to the release notes for details.

    JUnit 4.13

    Please refer to the release notes for details.

    JUnit 4.13 RC 2

    Please refer to the release notes for details.

    JUnit 4.13 RC 1

    Please refer to the release notes for details.

    JUnit 4.13 Beta 3

    Please refer to the release notes for details.

    JUnit 4.13 Beta 2

    Please refer to the release notes for details.

    JUnit 4.13 Beta 1

    Please refer to the release notes for details.

    JUnit 4.12

    Please refer to the release notes for details.

    JUnit 4.12 Beta 3

    Please refer to the release notes for details.

    JUnit 4.12 Beta 2

    No release notes provided.

    JUnit 4.12 Beta 1

    No release notes provided.

    Commits
    • 1b683f4 [maven-release-plugin] prepare release r4.13.1
    • ce6ce3a Draft 4.13.1 release notes
    • c29dd82 Change version to 4.13.1-SNAPSHOT
    • 1d17486 Add a link to assertThrows in exception testing
    • 543905d Use separate line for annotation in Javadoc
    • 510e906 Add sub headlines to class Javadoc
    • 610155b Merge pull request from GHSA-269g-pwp5-87pp
    • b6cfd1e Explicitly wrap float parameter for consistency (#1671)
    • a5d205c Fix GitHub link in FAQ (#1672)
    • 3a5c6b4 Deprecated since jdk9 replacing constructor instance of Double and Float (#1660)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • [SECURITY] Use HTTPS to resolve dependencies in Maven Build

    [SECURITY] Use HTTPS to resolve dependencies in Maven Build

    mitm_build


    This is a security fix for a vulnerability in your Apache Maven pom.xml file(s).

    The build files indicate that this project is resolving dependencies over HTTP instead of HTTPS. This leaves your build vulnerable to allowing a Man in the Middle (MITM) attackers to execute arbitrary code on your or your computer or CI/CD system.

    This vulnerability has a CVSS v3.0 Base Score of 8.1/10.

    POC code has existed since 2014 to maliciously compromise a JAR file in-flight. MITM attacks against HTTP are increasingly common, for example Comcast is known to have done it to their own users.

    This contribution is a part of a submission to the GitHub Security Lab Bug Bounty program.

    Detecting this and Future Vulnerabilities

    This vulnerability was automatically detected by LGTM.com using this CodeQL Query.

    As of September 2019 LGTM.com and Semmle are officially a part of GitHub.

    You can automatically detect future vulnerabilities like this by enabling the free (for open-source) LGTM App.

    I'm not an employee of GitHub nor of Semmle, I'm simply a user of LGTM.com and an open-source security researcher.

    Source

    Yes, this contribution was automatically generated, however, the code to generate this PR was lovingly hand crafted to bring this security fix to your repository.

    The source code that generated and submitted this PR can be found here: JLLeitschuh/bulk-security-pr-generator

    Opting-Out

    If you'd like to opt-out of future automated security vulnerability fixes like this, please consider adding a file called .github/GH-ROBOTS.txt to your repository with the line:

    User-agent: JLLeitschuh/bulk-security-pr-generator
    Disallow: *
    

    This bot will respect the ROBOTS.txt format for future contributions.

    Alternatively, if this project is no longer actively maintained, consider archiving the repository.

    CLA Requirements

    This section is only relevant if your project requires contributors to sign a Contributor License Agreement (CLA) for external contributions.

    It is unlikely that I'll be able to directly sign CLAs. However, all contributed commits are already automatically signed-off.

    The meaning of a signoff depends on the project, but it typically certifies that committer has the rights to submit this work under the same license and agrees to a Developer Certificate of Origin (see https://developercertificate.org/ for more information).

    - Git Commit Signoff documentation

    If signing your organization's CLA is a strict-requirement for merging this contribution, please feel free to close this PR.

    Tracking

    All PR's generated as part of this fix are tracked here: https://github.com/JLLeitschuh/bulk-security-pr-generator/issues/2

    opened by JLLeitschuh 0
  • Detect client bandwidth or whether WebSocket Connection is busy

    Detect client bandwidth or whether WebSocket Connection is busy

    I'm using Webbit for streaming video over a websocket, I want to apply some adaptive streaming, but I am scratching my head on how I can detect the bandwidth of the user, or just whether to check when data is still outgoing. WebsocketConnection.send(data) will return immediately afaik.

    Is there a way in Webbit to check whether a connection is busy? Is that even an option?

    opened by Kjos 2
  • Adding headers to WebSocket

    Adding headers to WebSocket

    I have a problem with webbit. Is there a way to add a ACCESS_CONTROL_ALLOW_ORIGIN header to the normal web server?

    Currently my code looks like this.

        webSocket = new WebSocketHandler();
        WebServer webServer = WebServers.createWebServer(2021);
    
        webServer.add("/", webSocket);
        webServer.start();
    
    opened by NexusNull 1
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
A high-level and lightweight HTTP client framework for Java. it makes sending HTTP requests in Java easier.

A high-level and lightweight HTTP client framework for Java. it makes sending HTTP requests in Java easier.

dromara 1.2k Jan 8, 2023
Tiny, easily embeddable HTTP server in Java.

NanoHTTPD – a tiny web server in Java NanoHTTPD is a light-weight HTTP server designed for embedding in other applications, released under a Modified

NanoHttpd 6.5k Jan 5, 2023
Square’s meticulous HTTP client for the JVM, Android, and GraalVM.

OkHttp See the project website for documentation and APIs. HTTP is the way modern applications network. It’s how we exchange data & media. Doing HTTP

Square 43.4k Jan 5, 2023
Feign makes writing java http clients easier

Feign makes writing java http clients easier Feign is a Java to HTTP client binder inspired by Retrofit, JAXRS-2.0, and WebSocket. Feign's first goal

null 8.5k Dec 30, 2022
Google HTTP Client Library for Java

Google HTTP Client Library for Java Description Written by Google, the Google HTTP Client Library for Java is a flexible, efficient, and powerful Java

Google APIs 1.3k Jan 4, 2023
⚗️ Lightweight HTTP extensions for Java 11

Methanol A lightweight library that complements java.net.http for a better HTTP experience. Overview Methanol provides useful lightweight HTTP extensi

Moataz Abdelnasser 175 Dec 17, 2022
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
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 Dec 30, 2022
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
Feign makes writing java http clients easier

Feign makes writing java http clients easier Feign is a Java to HTTP client binder inspired by Retrofit, JAXRS-2.0, and WebSocket. Feign's first goal

null 8.5k Jan 1, 2023
Share the chat messages across Minecraft Servers via HTTP backend powered by Spring Boot, this is the backend part of the project.

InterconnectedChat-Backend Share the chat messages across Minecraft Servers via HTTP backend powered by Spring Boot, this is the backend part of the p

贺兰星辰 3 Oct 6, 2021
Fast_Responder is a service that lets you quickly create an Http request responder

Fast_Responder is a service that lets you quickly create an Http request responder. The transponder can receive any request path configured and determine the request parameters according to your configuration to return different results. In addition to processing requests, the transponder can also make Http requests to any request address based on the latency, request headers, and parameters you configure. In essence, fast_responder is a dynamic mock service.

null 8 Jan 26, 2022
httpx - CLI to run HTTP file

httpx: CLI for run http file httpx is a CLI to execute requests from JetBrains Http File. How to install? Mac : brew install httpx-sh/tap/httpx Other

httpx 105 Dec 15, 2022
Konas Client de-obfuscated and manually remaped by Gopro336, Perry, and other based people

Konas-Deobf-Remap This project doesent really have a purpose anymore now that the real source code has leaked (this is a higher version tho) Deobfusca

null 52 Dec 13, 2022
GithubReleases4J - GitHub Releases for Java , based on GitHub RESTful API .

GithubReleases4J - GitHub Releases for Java , based on GitHub RESTful API .

Carm 5 Jun 27, 2022
Koios Java Client Library is based on Koios Elastic Query Layer for Cardano Node by Cardano Community Guild Operators

Koios Java Client What is Koios? Koios Java Client Library is based on Koios Elastic Query Layer for Cardano Node by Cardano Community Guild Operators

Dudi Edri 13 Dec 4, 2022
Easy Setup Stub Server

Moco Moco is an easy setup stub framework. Latest Release 1.1.0 More details in Release Notes User Voice Let me know if you are using Moco. Join Moco

Zheng Ye 4.1k Jan 4, 2023
Allows you to duplicate items via the server kicking you. (Credits to TheTroll2001)

CloseConnection Dupe (1.12.2-1.17.1) Allows you to duplicate items via the server kicking you. (Credits to TheTroll2001) Usage Type .dupe <method> <pa

null 20 Nov 15, 2022