- Fix for proxy headers see #457
- Add CI for Ruby 2.7, Ruby 3.3 and 3.4
- PUT and PATCH requests now behave like POST requests with multipart form data supporting http_post, http_put, and http_patch with PostField arguments
- Clean up easy handle after failing to add to a multi handle
- With newer versions of libcurl we can use curl_easy_escape instead of curl_escape, this should improve character encoding support
- When available use curl_multi_wait for greater system compatibility, users of libcurl 7.28.0 and later should benefit from this change
- Improve easy handle cloning to deep copy related lists, headers, cookies , proxy_headers, ftp_commands and resolve list.
- Updating test suite and internal tools for ruby 3.4
- CURLOPT_COOKIELIST support see examples:
easy.setopt(Curl::CURLOPT_COOKIELIST, "Set-Cookie: c1=v1; domain=localhost; expires=#{expires.httpdate};")
easy.setopt(Curl::CURLOPT_COOKIELIST, [ ['.localhost', 'TRUE', '/', 'FALSE', 0, 'session', '42'].join("\t"),
['.localhost', 'TRUE', '/', 'FALSE', 0, 'session2', '84'].join("\t"), '', ].join("\n") )
- Add :on_missing to callbacks supported by Curl::Multi.http
- Fix for PUT request length calculation
- Fix a double quote issue when evaluating cert's path
- 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 to timeout_ms
- Add
SOCKS5_HOSTNAME
support
- Added
Curl::Multi.autoclose
and Curl::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 via
multi.close
or have it always close your connections with Curl::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 equal 0
or infinity
- Add
PATCH
support?
- Add support for
CURLOPT_PATH_AS_IS
- Add
.cookielist
method to Curb::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
to StandardError
- 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 a 401
but instead 403
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
- Add
Curl::HTTP_2_0
, and Curl.http2?
- Support
CURLOPT_UNIX_SOCKET_PATH
in Curl::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 (use rb_thread_fd_select
instead of rb_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 curl 7.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
in Curl::Easy
- Raise an exception if
curb
doesn't know how to handle a CURLOPT
- 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 for appconnect
- Reset handle before each call when using "super simple API"
- Added support for
app_connect_time
from libcurl
- Alias
body_str
to body
and header_str
to head
- Make "super simple API" more efficient by storing
Curl::Easy
instance in Thread.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
- 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
in Curl::Easy
- Add
.status
to Curl::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
to CURL_IPRESOLVE_WHATEVER
e.g. :auto
- Add
on_redirect
and on_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 of rb_thread_select
for ruby 1.9.x
- Copy-paste mistake which made it impossible to set
CURLOPT_SSL_VERIFYHOST
to 2
- Copy-paste mistake that caused
CURLOPT_SSL_VERIFYPEER
to be overwritten by the value of use_netrc
setting
- Warn on exceptions in success/failure/complete callbacks
- Use
StringValueCStr
more instead of the less safe RSTRING_PTR
- Defaulting
CURLOPT_SSL_VERIFYHOST
to 2
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)
for easy.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