- Fix for PUT request length calculation
- see: #451
- Fix a double quote issue when evaluating cert's path
- see: #454
- Add shorter response_code alias -> code
Curl.get("https://github.com/taf2/curb").code # -> 200
- Improve exception handling from callback functions to ensure correct error line number is reported
- Resolve many compiler warnings
- Adjust how we handle exceptions to handle more cases
- Address alloc function T_DATA see: https://bugs.ruby-lang.org/issues/18007
- Add CURLOPT_PROXY_SSL_VERIFYHOST support
- Fix for exception handling in non standard callback functions on_redirect, on_complete
- Fix missing response code when using Curl::Multi.http with a block
- Fix to ensure redirect handler is called even when follow location is true
- Fix nested Curl.get/post inside of a block
r1 = Curl.get("http://example.com/1") {|http| r2 = Curl.get("http://example.com/2") {|h| } } r1.body # previously was r2's body... this is now fixed
- Restore compatibility with older libcurl installs
- Correctly set empty headers e.g. http.headers['Accept'] = '' # to remove the header from the request
- Add Ruby 3.1 to tests
- Support curlopt_protocols and curlopt_redir_protocols.
- Improved error handling via last_error tracking
- Added support for CURLOPT_RANGE
- Fixes for haproxy protocol via CURLOPT_HAPROXYPROTOCOL
- Ensure dev environments don't use older versions of rake when working on curb (not a production dependency)
- Many readmen updates - more windows support documentation
- Support added for CURLOPT_STDERR
- Fix build with curl
7.62.0
- Support building against Ruby
1.8
to help people migrate to the future and beyond
- Improve
timeout=
to allow Floating point values which will automatically switch totimeout_ms
- Add
SOCKS5_HOSTNAME
support - Added
Curl::Multi.autoclose
andCurl::Multi#close
to improve connection handling. In past releases connection clean up only ever happens when GC runs. Now in this release you can explicitly control connections viamulti.close
or have it always close your connections withCurl::Multi.autoclose=true
- Request handling reduces C (lines of code), and might resolve segfault when mixing curb with ruby timeout
- Timeout change for anyone who expected
0.9
to equal0
orinfinity
- Guard use of
CURLOPT_RESOLVE
in#if HAVE_CURLOPT_RESOLVE
- Prevent
NoMethodError
when no HTTP Status Curl.urlalize
will miss raw url's query params- Fix SSL versions constant names
- Add
Curl::Easy#resolve
method to implement static IP overrides, bypassing DNS - Add new curl features
- Allow extending
Curl::Easy
and having a different number of constructor arguments thanCurl::Easy
allows
- Fix
multi.pipeline
:HAVE_CURLMOPT_PIPELINING
was never defined - Eliminate warnings on Ruby
2.4.1
- Hang in
select()
- Revert 'Experimenting with adding multi handle cleanup after every request, normally would be cleaned up with GC
(problem addressed by fix hang in
select()
) - Prevent errant callbacks once the handle is cleaned up
- Add
PATCH
support? - Add support for
CURLOPT_PATH_AS_IS
- Add
.cookielist
method toCurb::Easy
- Improved Windows compatibility
- Correctly check for constants that may not be present in older versions of Curl
- Breaking change - Change base class for exceptions from
Exception
toStandardError
- Segmentation fault (introduced with commit 50ab567)
- Use 64-bit int for key in hash of active easy handles, to avoid clobbering on 32-bit systems
- Fix
http_auth_types
for:any
and:anysafe
- Use
LONG2NUM
andNUM2LONG
to support all values of thelong
type - Support empty reason phrases in the HTTP status line
- Implement setting of
CURLOPT_MAXCONNECTS
- Implement setting of
CURLOPT_FORBID_REUSE
- Ability to specify specific allowed TLS versions when connecting
- Add support for
HTTP/2.0
and multiplexing - Experimenting with adding multi handle cleanup after every request, normally would be cleaned up with GC
- Fix regression in
timeout
/timeout_ms
handling
- Remove
CURLAUTH_ANY
as the default for authentication setting, as too many services in the world don't respond correctly with a401
but instead403
so the option rarely works as we'd hope - Use the memory address as the key to correctly keep a hash of active easy handles alive in the multi handle -- should resolve existing reports of memory leaks as well as crashes under some conditions
- Only append query string if it exists
- Setting any of
CURLOPT_HEADER
,CURLOPT_NOPROGRESS
,CURLOPT_NOSIGNAL
,CURLOPT_HTTPGET
did not work (introduced in commits4358d04
and14e9b53
) - Compilation for curl versions before
7.40.0
Curl::Multi.http
call of theon_complete
callback expects unsupplied parameter
- Add
Curl::HTTP_2_0
, andCurl.http2?
- Support
CURLOPT_UNIX_SOCKET_PATH
inCurl::Easy
- Add
timeout_ms
/connect_timeout_ms
options - Add
on_redirect
callback handling to.http
- Restore support for older,
pre-7.17
versions of curl (fixes CentOS 5 compatibility) - Improve Ruby
2.2.x
support (userb_thread_fd_select
instead ofrb_thread_select
)
- Add SOCKS4A support
- Allow custom ssl cipher lists
- Add install instructions for Windows
- Make it possible easily reset the Thread current handle (
Curl.reset
)
- Add support for the new error
CURLM_ADDED_ALREADY
introduced at curl7.33.0
- Add conditionals for new
URLM_ADDED_ALREADY
error Curl#urlalize
-CGI.escape
for param values- Use correct HTTP verb for DELETE requests (was
delete
, and some servers are apparently case sensitive) - Typo in
ext/curb_errors.c
:BadBasswordError
->BadPasswordError
- Status method now returns the last status in the response header
- Support Ruby
2.2.0
- Support
CURLOPT_TCP_NODELAY
inCurl::Easy
- Raise an exception if
curb
doesn't know how to handle aCURLOPT
- Expose license via gemspec
- Implement seek function for multi-pass authentication uploads
- Guard against a curl without GSSAPI delegation compiled in
- Added
extconf.rb
entry forappconnect
- Reset handle before each call when using "super simple API"
- Added support for
app_connect_time
fromlibcurl
- Alias
body_str
tobody
andheader_str
tohead
- Setting
post_body
tonil
does not reset data posted inhttp(:GET)
- Various spurious/inconsequential warnings
Curl.head
usesOPTIONS
method instead ofHEAD
method
- Make "super simple API" more efficient by storing
Curl::Easy
instance inThread.current
- GSSAPI: Add required flags for GSSAPI delegation support
- GSSAPI: Allow setting of the new delegation flag
- GSSAPI: Implement support for libcurl SPNEGO flags in curb
- Clang compatibility
- Allow string data with simpler interface e.g.
Curl.post('...', 'data')
- Error installing on Ubuntu
- Protect callbacks from reset/close
Curl::Multi
not actually performing HTTP requests in cases when the:max_connects >= number of requests
- Build error when compiled with
-Werror=format-security
postalize
parameter escaping
- Support
CURLINFO_REDIRECT_URL
- Support
CURLOPT_RESUME_FROM
inCurl::Easy
- Add
.status
toCurl::Easy
instances - Support
CURLOPT_FAILONERROR
- Add even easier interface:
Curl.get
/Curl.post
/ e.t.c
- Breaking change -
on_failure
only fires for 5xx responses
- Error in README section for HTTP POST file upload.
- Add a default for
resolve_mode
toCURL_IPRESOLVE_WHATEVER
e.g.:auto
- Add
on_redirect
andon_missing
callbacks for 3xx/4xx responses - Allow
http_post(array_of_fields)
when using multipart form posts
- Check for obsolete, since it appears to be gone from later versions of libcurl per issue #100
- Regression in PUT requests with NULL bytes (caused by
RSTRING_PTR
=>StringValueCStr
change)
- Restore compatibility with 0.7.16 (e.g. suport for building without
CURLOPT_SEEKDATA
, etc) - Use
rb_thread_blocking_region
when available in place ofrb_thread_select
for ruby 1.9.x - Copy-paste mistake which made it impossible to set
CURLOPT_SSL_VERIFYHOST
to2
- Copy-paste mistake that caused
CURLOPT_SSL_VERIFYPEER
to be overwritten by the value ofuse_netrc
setting
- Warn on exceptions in success/failure/complete callbacks
- Use
StringValueCStr
more instead of the less safeRSTRING_PTR
- Defaulting
CURLOPT_SSL_VERIFYHOST
to2
to make it consistent with cURLs default value
- Add better support for timeouts - issue 48
- Improve stability, avoid bus errors when raising in callbacks
- Allow Content-Length header when sending a PUT request
- Better handling of cacert
- Support
CURLOPT_IPRESOLVE
- Allow
PostField.file#to_s
- Minor refactoring to how
PostField.file
handles strings - Accept symbol and any object that
responds_to?(:to_s)
foreasy.http(:verb)
- Free memory sooner after a request finishes instead of waiting for garbage collection
- Fix crash when sending nil for the
http_put
body - Fix inspect for
Curl::Easy
, thanks Hongli Lai - Fix unit test assertions for
Curl::Multi
, thanks Hongli Lai
Curl::Multi
perform is more robust process callbacks before exiting the loop - issue 24. Thanks to igrigorik and ramsingla- improve
Curl::Multi
idle callback robustness, trigger callbacks more often - issue 24. Thanks to igrigorik and ramsingla
- fix bug in http_* when http_delete or http("verb") raises an exception
- add support for autoreferrer e.g. if follow_location=true it will pass that along
- minor fix for no signal instead of INT2FIX Check boolean value
- add support to set the http version e.g.
easy.version = Curl::HTTP_1_1
- add support to disable libcurls internal use of signals.
- Support rubinius
- allow Multi.download to be called without a block
- add additional
Multi.download
examples
- Start tracking high level changes
- Add
Curl::Easy#close
- hard close an easy handle - Add
Curl::Easy#reset
- reset all settings but keep connections alive - Maintain persistent connections for single easy handles