If you want a plugin that supports request customization for REST, WebSocket, Socket.IO, SignalR, Server-Sent Events (and much more) out of the box, with regular updates and outstanding support from the developer, then BestHTTP is THE tool for you! You can visit the new demo page now: https://besthttpdemosite.azurewebsites.net/ Check out the docs. Supported platforms: WebGL iOS, Android Windows Store Apps/Windows 10/UWP Windows, Mac OS X, Linux ALL source code included! Most notable HTTP features are: Customize all parts of your requests: Methods(GET, HEAD, POST, PUT, DELETE, PATCH) Headers Cookies Max redirect count Timeouts Access all kind of data sent by the server: Headers Status code Cookies Connection pooling Connection and request timeouts Automatic Cookie handling Great range of Proxy support (Fiddler, Charles, etc.) Automatic caching, validating just like your browser Set your cache size and freshness gzip content encoding Basic and Digest authentication Multiple (url-encoded and multipart/form-data) form types Automatic redirection handling Upload and Download progress tracking Access your data while downloading You can resume downloads using Range headers HTTPS Customize a great range of global settings: Max connection per server Enable/disable cookies Private 'Browsing' Cookie Jar size etc WebSocket features: Full RFC compliance Support for extensions: Compression Extensions for WebSocket (RFC7692) Easy to use, 'just works' experience Socket.IO features: Compliance with the latest (1.x and 2.x) Socket.IO implementation Automatic transport upgrade/downgrade Binary data sending/receiving You can plug in your favorite Json decoder SignalR features: Works with the latest SignalR implementation Easy to use API Hubs Support for authentication Progress messages for long running jobs Automatic transport upgrade/downgrade You can plug in your favorite Json decoder SignalR Core features: Supports latest SignalR Core Strongly typed callbacks Uses the fastest Websocket transport Package includes a Header-based authenticator Server-Sent Events features: Compatible with the latest specification (http://www.w3.org/TR/eventsource/) Easy to use API Changelog: 1.12.1 (2019.05.29) General [Bugfix] Callbacks didn't called when abort requested on a HTTPRequest [Bugfix] ReaderWriterLockSlim of the HTTPRequest is nulled out while it later tried to use it 1.12.0 (2019.05.28) General [Improvement] Part of a larger code rewrite/overhaul removed a lot of locks and added lock-free collections and/or using ReaderWriterLockSlim. These changes affect all parts of the plugin from cookies to the signalr core protocol. [Bugfix] Fixed a bug in the protocol upgrade callback to do not overwrite the connection's previously set state [New Feature] HTTPRequest now supports the async-await pattern when CSHARP_7_OR_LATER is declared by Unity3d [Improvement] HTTPManager.TryToMinimizeTCPLatency's default value became true [Improvement] HTTPManager.MaxConnectionPerServer's default value became 6 SignalRCore [Bugfix] JSonProtocol now handles enums properly [Improvement] JSonProtocol now can handle nullable types Server-Sent Events [New Feature] Example added 1.11.2 (2019.04.15) General [New feature] HTTPManager.UserAgent field added. [Bugfix] Removed doubled quotes from multipart/form-data boundary [Improvement] FileConnection now uses BufferPoolMemoryStream too [Improvement] Increased default HTTPManager.MaxConnectionPerServer from 4 to 6 WebSocket [New Feature] New LastMessageReceived property to access when the last message is received from the server. [Bugfix] Removed custom host header creation as the HTTPRequest already sets it properly 1.11.1 (2019.01.31) General [Bugfix] Fixed compile errors when cookies and/or SignalR protocols are disabled SignalR [New Feature] Initial Client -> Server streaming support added 1.11.0 (2019.01.21) General [New Feature] Implemented new buffer pool mechanism to reuse internal byte arrays. This is quite a large change that touches all part of the plugin, but reduces the plugin's memory garbage production very very much! (Thanks to Teemu @ Delta Cygni Labs for the base idea and code donation!) [New Feature] All samples are available in a public git repo too (https://github.com/Benedicht/BestHTTP_Examples) [New Feature] Added a new IIOService interface and the plugin now uses the file system through this abstraction. New IIOService implementations can be added and set to the HTTPManager.IOService field. [New Feature] Initial SOCKS proxy with basic authentication support added. [Improvement] All samples now placed inside a namespace [Improvement] Removed Unity's WWWForm option from AddField and FormUsage. [Improvement] Updated BouncyCastle to the latest version. [Improvement] BouncyCastle namespaces are moved under the BestHTTP.SecureProtocol namespace, custom class (like ICertificateVerifyer) are remaining under the Org.BouncyCastle.Crypto.Tls namespace. I hope this will help in cases where other plugins are bundling BC too. [Bugfix] The request will fail if the proxy-authentication is failed [Bugfix] Caching headers set multiple times on redirection Socket.IO [Bugfix] The plugin will not try to emit an error when the error callback throws an exception. SignalRCore [New Feature] Added new samples [Improvement] New OnRedirect event handler [Bugfix] Implemented proper redirect and authentication handling. [Bugfix] Now it can handle relative redirect urls. 1.10.10 (2018.11.04) General [Improvement] New demo page added: https://besthttpdemosite.azurewebsites.net/ [Bugfix] One of HTTProxy's constructor didn't use a parameter to set the correct value [Improvement] Improved connection handling and code quality for the UWP connection layer WebGL [New Feature] Partial cookie support added (cookies are managed by the browser, but the plugin is able to read and write them) [New Feature] Read and write cookie support added [New Feature] HTTPRequest has a new WithCredentials property [Improvement] More requests will be 'simple' to do not require a preflight request SignalRCore [New Feature] Added client-sent ping messages [Improvement] New example added WebSockets [Improvement] Increased the limit of the per-message deflate extension's minDataLengthToCompress parameter. [Improvement] [WebGL] Client-side generated status code of 1006 is treated as an error now to match non-webgl behavior. 1.10.9 (2018.07.05) General [Bugfix] Fixed a compile error under WebGL [Improvement] HTTPRequest's GetEntityBody became public api [Improvement] Added GetFormFields to HTTPRequest 1.10.8 (2018.07.02) General [Improvement] Greatly reduced the TCP packets that sent out for a HTTP request WebSocket [Improvement] Frame downloading now isn't blocked while user code is executing on current completed frames SocketIO [Bugfix] Implemented a new ToInt function instead of char.GetNumericValue as this later one throws an exception under WebGL using the new 4.x runtime SignalR Core [Improvement] Fixed compile errors for WSA [Improvement] Added HubOptions to be able to set more options [Improvement] Now it's possible to skip the negotiation process and connect straigth with the (only) WebSocket protocol [Bugfix] Authentication provider's PrepareRequest wasn't called on the negotiation request. 1.10.7 (2018.06.05) General [Improvement] Logger will log out time infromation too [Improvement] HTTPRequest will send a Content-Length header with zero value when there's no data to send WebSocket [Bugfix] Fixed a case where the connection reported closed unintentionally SignalR Core [Improvement] Added PrepareUri function to the IAuthenticationProvider interface [Improvement] Added negotiation request. Negotiation result now stored in the NegotiationResult property. [Improvement] Added support for 'Close' server messages [Improvement] More documentation and code comments [Improvement] Code cleanup 1.10.6 (2018.05.20) General [Bugfix] Fixed a case where aborting a request throw and exception SocketIO [Bugfix] Will not send a ping packet while waiting for a pong WebSocket [Bugfix] OnError OnErrorDesc events not called when the websocket's State > Connecting SignalRCore [Improvement] New BESTHTTP_DISABLE_SIGNALR_CORE symbol to disable SignalR Core [Bugfix] The SignalR Core implementation has no dependency on SignalR classes now 1.10.4 (2018.04.15) General [Improvement] csproj files added to the package to genereate dlls [Improvement] Improved compatibilty with other packages that are have theirs own Utility class in the root namespace. [Improvement] Improved compatibility with the Experimental (.NET 4.6) runtime [Improvement] Using the HTTPRequest's CustomTLSServerNameList property now it's possible to add custom SNIs [Bugfix] Decompressor used during streaming will buffer up data if necessary to avoid a GZip exception. [Bugfix] Removed unnecessary logging in the HTTPUpdateDelegator [Bugfix] TLS SNIs will not be sent if the host is an IPv4 or IPv6 address [Bugfix] Digest authentication failed with the proxy WebSocket [Improvement] Now it's possible to close the websocket before it connects [Improvement] New State property to access the websocket's state [Bugfix] [WebGL] HTTPManager.Setup() isn't called when only the WebSocket protocol is used SocketIO [Bugfix] proper pingTimeout implementation (thanks @carsanlop for the code!) SignalR [Bugfix] It will not try to reconnect after leaving Unity's play mode. SignalRCore [New Feature] New SignalR Core implementation for SignalRCore 1.0.0-alpha2 1.10.3 (2017.11.11) General [Improvement] Added OPTIONS verb [Improvement] Better compatibility with Unity 2017.2 [Bugfix] Boundary generated for multipart/form-data will be a truely unique value that shouldn't be found in the payload WebSocket [New Feature] Added new CloseAfterNoMesssage TimeSpan property to the WebSocket class. When StartPingThread is true, the plugin will check for messages and will close the connection and emit an OnError/OnErrorDesc event after the specified time. It's not available on WebGL platform! [New Feature] Added Latency property. When StartPingThread is true, it will calculate the latency from the Ping-Pong message round-trip times. It's not available on WebGL platform! SignalR [Bugfix] Group token not sent with polling requests 1.10.2 (2017.07.29) General [Bugfix] Fixed an exception when redirected 1.10.1 (2017.07.26) General [New Feature] Added BESTHTTP_DISABLE_GZIP to be able to disable gzip Accept-Encoding requests [Improvement] Improved compatibility when run in an Editor window [Improvement] DNS query is done async with timeout (Thanks goes to chriser on the forums for the code) [Bugfix] The HTTPConnection object will not close the TCP stream when the "Connection: Close" header present and the http response handler's IsClosedManually set to true. [Bugfix] Fixed a compilation issue in RawJsonForm.cs when both BESTHTTP_DISABLE_SOCKETIO and BESTHTTP_DISABLE_SIGNALR are defined [Bugfix] When a request's DisableChace is set to true, it will not produce a warning if caching headers added manually [Bugfix] When there's no connection the CookieJar will not override saved cookies with an empty one Websocket [Bugfix] Fixed an issue where receive threads are not shut down resulting in an exception Socket.IO [Improvement] Compatibility with Socket.IO 2.0.0 Server-Sent Events [Improvement] Added WithCredentials property to the EventSource class under WebGL [Improvement] EventSource constructor will thrown a NotSupportedException under WebGL when the underlying browser isn't supports the EventSource protocol [Bugfix] Subscibing to a named event (On(...)) isn't worked under WebGL 1.10.0 (2017.05.05) General Removed support for Windows Phone 8 [New Feature] HTTPManager and HTTPRequest has a new property 'TryToMinimizeTCPLatency' to turn on/off TCP NoDelay [New Feature] A new Form type 'RawJson' to send the fields added with AddField jon encoded [Improvement] Added DefaultCertificationValidator to the HTTPManger [Improvement] Improved compatibility with Unity 2017.1 [Improvement] Now the plugin capable to download files larger than 2 GB (Thanks goes to Daniel @ present4D) [Bugfix] Accessing streaming assets now possible under WebGL builds [Bugfix] Fixed a sneaky bug where the HTTPUpdateDelegator unloaded in builds Socket.IO [Improvement] Sockets now have an Id property generated the same as in the JS Socket.IO lib.