httpx 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/doc/release_notes/1_1_3.md +18 -0
- data/lib/httpx/altsvc.rb +1 -1
- data/lib/httpx/plugins/circuit_breaker/circuit_store.rb +4 -6
- data/lib/httpx/plugins/expect.rb +1 -2
- data/lib/httpx/plugins/follow_redirects.rb +42 -15
- data/lib/httpx/plugins/proxy/http.rb +1 -1
- data/lib/httpx/plugins/proxy.rb +1 -3
- data/lib/httpx/plugins/response_cache/store.rb +4 -6
- data/lib/httpx/plugins/retries.rb +2 -4
- data/lib/httpx/plugins/stream.rb +11 -4
- data/lib/httpx/plugins/upgrade.rb +0 -1
- data/lib/httpx/resolver/multi.rb +7 -6
- data/lib/httpx/resolver.rb +2 -2
- data/lib/httpx/response/body.rb +11 -3
- data/lib/httpx/session.rb +11 -7
- data/lib/httpx/version.rb +1 -1
- data/lib/httpx.rb +6 -5
- data/sig/plugins/circuit_breaker.rbs +3 -1
- data/sig/plugins/follow_redirects.rbs +9 -1
- data/sig/plugins/response_cache.rbs +3 -1
- data/sig/response/body.rbs +2 -0
- data/sig/session.rbs +5 -3
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88e35920c570a12032835c1c67c9ffde6119b0f5e26e357ba58dbe385e1483a5
|
4
|
+
data.tar.gz: e421a0532b92e6a1e689c1d907ef0b87d98e6589093d791ce9a905d475b0c638
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e01adb8c3974497b091c72d8b9848dd02973c19924c910be4649f83c3430b579a6ea0889f0f27a348cabbddd6ed56cc1b682be0ae984b4dd0ef5dbf76543ba8e
|
7
|
+
data.tar.gz: 343ace24f2a3be6ce420b4c5f8fbe919ad84dabdc8f3b97bbafc3bda8466fef6dfa48a1985478fd7ec6056678818a60b9cfb158f4423569086f42d4c27c696f6
|
data/README.md
CHANGED
@@ -46,7 +46,7 @@ And that's the simplest one there is. But you can also do:
|
|
46
46
|
HTTPX.post("http://example.com", form: { user: "john", password: "pass" })
|
47
47
|
|
48
48
|
http = HTTPX.with(headers: { "x-my-name" => "joe" })
|
49
|
-
http.patch(
|
49
|
+
http.patch("http://example.com/file", body: File.open("path/to/file")) # request body is streamed
|
50
50
|
```
|
51
51
|
|
52
52
|
If you want to do some more things with the response, you can get an `HTTPX::Response`:
|
@@ -151,7 +151,7 @@ All Rubies greater or equal to 2.7, and always latest JRuby and Truffleruby.
|
|
151
151
|
|
152
152
|
## Versioning Policy
|
153
153
|
|
154
|
-
|
154
|
+
`httpx` follows Semantic Versioning.
|
155
155
|
|
156
156
|
## Contributing
|
157
157
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# 1.1.2
|
2
|
+
|
3
|
+
## improvements
|
4
|
+
|
5
|
+
## security
|
6
|
+
|
7
|
+
* when using `:follow_redirects` plugin, the "authorization" header will be removed when following redirect responses to a different origin.
|
8
|
+
|
9
|
+
## bugfixes
|
10
|
+
|
11
|
+
* fixed `:stream` plugin not following redirect responses when used with the `:follow_redirects` plugin.
|
12
|
+
* fixed `:stream` plugin not doing content decoding when responses were p.ex. gzip-compressed.
|
13
|
+
* fixed bug preventing usage of IPv6 loopback or link-local addresses in the request URL in systems with no IPv6 internet connectivity (the request was left hanging).
|
14
|
+
* protect all code which may initiate a new connection from abrupt errors (such as internet turned off), as it was done on the initial request call.
|
15
|
+
|
16
|
+
## chore
|
17
|
+
|
18
|
+
internal usage of `mutex_m` has been removed (`mutex_m` is going to be deprecated in ruby 3.3).
|
data/lib/httpx/altsvc.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "mutex_m"
|
4
|
-
|
5
3
|
module HTTPX::Plugins::CircuitBreaker
|
6
4
|
using HTTPX::URIExtensions
|
7
5
|
|
@@ -15,17 +13,17 @@ module HTTPX::Plugins::CircuitBreaker
|
|
15
13
|
options.circuit_breaker_half_open_drip_rate
|
16
14
|
)
|
17
15
|
end
|
18
|
-
@
|
16
|
+
@circuits_mutex = Thread::Mutex.new
|
19
17
|
end
|
20
18
|
|
21
19
|
def try_open(uri, response)
|
22
|
-
circuit = @
|
20
|
+
circuit = @circuits_mutex.synchronize { get_circuit_for_uri(uri) }
|
23
21
|
|
24
22
|
circuit.try_open(response)
|
25
23
|
end
|
26
24
|
|
27
25
|
def try_close(uri)
|
28
|
-
circuit = @
|
26
|
+
circuit = @circuits_mutex.synchronize do
|
29
27
|
return unless @circuits.key?(uri.origin) || @circuits.key?(uri.to_s)
|
30
28
|
|
31
29
|
get_circuit_for_uri(uri)
|
@@ -37,7 +35,7 @@ module HTTPX::Plugins::CircuitBreaker
|
|
37
35
|
# if circuit is open, it'll respond with the stored response.
|
38
36
|
# if not, nil.
|
39
37
|
def try_respond(request)
|
40
|
-
circuit = @
|
38
|
+
circuit = @circuits_mutex.synchronize { get_circuit_for_uri(request.uri) }
|
41
39
|
|
42
40
|
circuit.respond
|
43
41
|
end
|
data/lib/httpx/plugins/expect.rb
CHANGED
@@ -99,8 +99,7 @@ module HTTPX
|
|
99
99
|
response.close
|
100
100
|
request.headers.delete("expect")
|
101
101
|
request.transition(:idle)
|
102
|
-
|
103
|
-
connection.send(request)
|
102
|
+
send_request(request, connections, options)
|
104
103
|
return
|
105
104
|
end
|
106
105
|
|
@@ -17,6 +17,8 @@ module HTTPX
|
|
17
17
|
MAX_REDIRECTS = 3
|
18
18
|
REDIRECT_STATUS = (300..399).freeze
|
19
19
|
|
20
|
+
using URIExtensions
|
21
|
+
|
20
22
|
module OptionsMethods
|
21
23
|
def option_max_redirects(value)
|
22
24
|
num = Integer(value)
|
@@ -28,6 +30,10 @@ module HTTPX
|
|
28
30
|
def option_follow_insecure_redirects(value)
|
29
31
|
value
|
30
32
|
end
|
33
|
+
|
34
|
+
def option_allow_auth_to_other_origins(value)
|
35
|
+
value
|
36
|
+
end
|
31
37
|
end
|
32
38
|
|
33
39
|
module InstanceMethods
|
@@ -61,25 +67,31 @@ module HTTPX
|
|
61
67
|
redirect_uri = redirect_request.uri
|
62
68
|
options = retry_options
|
63
69
|
else
|
70
|
+
redirect_headers = redirect_request_headers(redirect_request.uri, redirect_uri, request.headers, options)
|
64
71
|
|
65
72
|
# redirects are **ALWAYS** GET
|
66
|
-
|
67
|
-
|
68
|
-
|
73
|
+
retry_opts = Hash[options].merge(
|
74
|
+
headers: redirect_headers.to_h,
|
75
|
+
body: redirect_request.body,
|
76
|
+
max_redirects: max_redirects - 1
|
77
|
+
)
|
78
|
+
retry_options = options.class.new(retry_opts)
|
69
79
|
end
|
70
80
|
|
71
|
-
|
72
|
-
|
73
|
-
request.redirect_request = retry_request
|
81
|
+
redirect_uri = Utils.to_uri(redirect_uri)
|
74
82
|
|
75
83
|
if !options.follow_insecure_redirects &&
|
76
84
|
response.uri.scheme == "https" &&
|
77
|
-
|
78
|
-
error = InsecureRedirectError.new(
|
85
|
+
redirect_uri.scheme == "http"
|
86
|
+
error = InsecureRedirectError.new(redirect_uri.to_s)
|
79
87
|
error.set_backtrace(caller)
|
80
88
|
return ErrorResponse.new(request, error, options)
|
81
89
|
end
|
82
90
|
|
91
|
+
retry_request = build_request("GET", redirect_uri, retry_options)
|
92
|
+
|
93
|
+
request.redirect_request = retry_request
|
94
|
+
|
83
95
|
retry_after = response.headers["retry-after"]
|
84
96
|
|
85
97
|
if retry_after
|
@@ -93,16 +105,27 @@ module HTTPX
|
|
93
105
|
|
94
106
|
log { "redirecting after #{retry_after} secs..." }
|
95
107
|
pool.after(retry_after) do
|
96
|
-
|
97
|
-
connection.send(retry_request)
|
108
|
+
send_request(retry_request, connections, options)
|
98
109
|
end
|
99
110
|
else
|
100
|
-
|
101
|
-
connection.send(retry_request)
|
111
|
+
send_request(retry_request, connections, options)
|
102
112
|
end
|
103
113
|
nil
|
104
114
|
end
|
105
115
|
|
116
|
+
def redirect_request_headers(original_uri, redirect_uri, headers, options)
|
117
|
+
return headers if options.allow_auth_to_other_origins
|
118
|
+
|
119
|
+
return headers unless headers.key?("authorization")
|
120
|
+
|
121
|
+
unless original_uri.origin == redirect_uri.origin
|
122
|
+
headers = headers.dup
|
123
|
+
headers.delete("authorization")
|
124
|
+
end
|
125
|
+
|
126
|
+
headers
|
127
|
+
end
|
128
|
+
|
106
129
|
def __get_location_from_response(response)
|
107
130
|
location_uri = URI(response.headers["location"])
|
108
131
|
location_uri = response.uri.merge(location_uri) if location_uri.relative?
|
@@ -111,14 +134,18 @@ module HTTPX
|
|
111
134
|
end
|
112
135
|
|
113
136
|
module RequestMethods
|
114
|
-
|
115
|
-
klass.__send__(:attr_writer, :redirect_request)
|
116
|
-
end
|
137
|
+
attr_accessor :root_request
|
117
138
|
|
118
139
|
def redirect_request
|
119
140
|
@redirect_request || self
|
120
141
|
end
|
121
142
|
|
143
|
+
def redirect_request=(req)
|
144
|
+
@redirect_request = req
|
145
|
+
req.root_request = @root_request || self
|
146
|
+
@response = nil
|
147
|
+
end
|
148
|
+
|
122
149
|
def response
|
123
150
|
return super unless @redirect_request
|
124
151
|
|
@@ -38,7 +38,7 @@ module HTTPX
|
|
38
38
|
request.transition(:idle)
|
39
39
|
request.headers["proxy-authorization"] =
|
40
40
|
connection.options.proxy.authenticate(request, response.headers["proxy-authenticate"])
|
41
|
-
|
41
|
+
send_request(request, connections)
|
42
42
|
return
|
43
43
|
end
|
44
44
|
end
|
data/lib/httpx/plugins/proxy.rb
CHANGED
@@ -166,9 +166,7 @@ module HTTPX
|
|
166
166
|
@_proxy_uris.shift
|
167
167
|
log { "failed connecting to proxy, trying next..." }
|
168
168
|
request.transition(:idle)
|
169
|
-
|
170
|
-
connections << connection unless connections.include?(connection)
|
171
|
-
connection.send(request)
|
169
|
+
send_request(request, connections, options)
|
172
170
|
return
|
173
171
|
end
|
174
172
|
response
|
@@ -1,17 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "mutex_m"
|
4
|
-
|
5
3
|
module HTTPX::Plugins
|
6
4
|
module ResponseCache
|
7
5
|
class Store
|
8
6
|
def initialize
|
9
7
|
@store = {}
|
10
|
-
@
|
8
|
+
@store_mutex = Thread::Mutex.new
|
11
9
|
end
|
12
10
|
|
13
11
|
def clear
|
14
|
-
@
|
12
|
+
@store_mutex.synchronize { @store.clear }
|
15
13
|
end
|
16
14
|
|
17
15
|
def lookup(request)
|
@@ -66,7 +64,7 @@ module HTTPX::Plugins
|
|
66
64
|
end
|
67
65
|
|
68
66
|
def _get(request)
|
69
|
-
@
|
67
|
+
@store_mutex.synchronize do
|
70
68
|
responses = @store[request.response_cache_key]
|
71
69
|
|
72
70
|
return unless responses
|
@@ -80,7 +78,7 @@ module HTTPX::Plugins
|
|
80
78
|
end
|
81
79
|
|
82
80
|
def _set(request, response)
|
83
|
-
@
|
81
|
+
@store_mutex.synchronize do
|
84
82
|
responses = (@store[request.response_cache_key] ||= [])
|
85
83
|
|
86
84
|
responses.reject! do |res|
|
@@ -113,12 +113,10 @@ module HTTPX
|
|
113
113
|
log { "retrying after #{retry_after} secs..." }
|
114
114
|
pool.after(retry_after) do
|
115
115
|
log { "retrying (elapsed time: #{Utils.elapsed_time(retry_start)})!!" }
|
116
|
-
|
117
|
-
connection.send(request)
|
116
|
+
send_request(request, connections, options)
|
118
117
|
end
|
119
118
|
else
|
120
|
-
|
121
|
-
connection.send(request)
|
119
|
+
send_request(request, connections, options)
|
122
120
|
end
|
123
121
|
|
124
122
|
return
|
data/lib/httpx/plugins/stream.rb
CHANGED
@@ -11,8 +11,6 @@ module HTTPX
|
|
11
11
|
def each(&block)
|
12
12
|
return enum_for(__method__) unless block
|
13
13
|
|
14
|
-
raise Error, "response already streamed" if @response
|
15
|
-
|
16
14
|
@request.stream = self
|
17
15
|
|
18
16
|
begin
|
@@ -119,7 +117,10 @@ module HTTPX
|
|
119
117
|
|
120
118
|
module ResponseMethods
|
121
119
|
def stream
|
122
|
-
@request.
|
120
|
+
request = @request.root_request if @request.respond_to?(:root_request)
|
121
|
+
request ||= @request
|
122
|
+
|
123
|
+
request.stream
|
123
124
|
end
|
124
125
|
end
|
125
126
|
|
@@ -132,7 +133,13 @@ module HTTPX
|
|
132
133
|
def write(chunk)
|
133
134
|
return super unless @stream
|
134
135
|
|
135
|
-
|
136
|
+
return 0 if chunk.empty?
|
137
|
+
|
138
|
+
chunk = decode_chunk(chunk)
|
139
|
+
|
140
|
+
@stream.on_chunk(chunk.dup)
|
141
|
+
|
142
|
+
chunk.size
|
136
143
|
end
|
137
144
|
|
138
145
|
private
|
@@ -46,7 +46,6 @@ module HTTPX
|
|
46
46
|
|
47
47
|
log { "upgrading to #{upgrade_protocol}..." }
|
48
48
|
connection = find_connection(request, connections, options)
|
49
|
-
connections << connection unless connections.include?(connection)
|
50
49
|
|
51
50
|
# do not upgrade already upgraded connections
|
52
51
|
return if connection.upgrade_protocol == upgrade_protocol
|
data/lib/httpx/resolver/multi.rb
CHANGED
@@ -46,14 +46,15 @@ module HTTPX
|
|
46
46
|
addresses = @resolver_options[:cache] && (connection.addresses || HTTPX::Resolver.nolookup_resolve(hostname))
|
47
47
|
return unless addresses
|
48
48
|
|
49
|
-
addresses
|
49
|
+
addresses.group_by(&:family).sort { |(f1, _), (f2, _)| f2 <=> f1 }.each do |family, addrs|
|
50
|
+
# try to match the resolver by family. However, there are cases where that's not possible, as when
|
51
|
+
# the system does not have IPv6 connectivity, but it does support IPv6 via loopback/link-local.
|
52
|
+
resolver = @resolvers.find { |r| r.family == family } || @resolvers.first
|
50
53
|
|
51
|
-
|
52
|
-
addrs = addresses[resolver.family]
|
54
|
+
next unless resolver # this should ever happen
|
53
55
|
|
54
|
-
|
55
|
-
|
56
|
-
resolver.emit_addresses(connection, resolver.family, addrs, true)
|
56
|
+
# it does not matter which resolver it is, as early-resolve code is shared.
|
57
|
+
resolver.emit_addresses(connection, family, addrs, true)
|
57
58
|
end
|
58
59
|
end
|
59
60
|
|
data/lib/httpx/resolver.rb
CHANGED
@@ -13,10 +13,10 @@ module HTTPX
|
|
13
13
|
require "httpx/resolver/https"
|
14
14
|
require "httpx/resolver/multi"
|
15
15
|
|
16
|
-
@lookup_mutex = Mutex.new
|
16
|
+
@lookup_mutex = Thread::Mutex.new
|
17
17
|
@lookups = Hash.new { |h, k| h[k] = [] }
|
18
18
|
|
19
|
-
@identifier_mutex = Mutex.new
|
19
|
+
@identifier_mutex = Thread::Mutex.new
|
20
20
|
@identifier = 1
|
21
21
|
@system_resolver = Resolv::Hosts.new
|
22
22
|
|
data/lib/httpx/response/body.rb
CHANGED
@@ -41,9 +41,9 @@ module HTTPX
|
|
41
41
|
def write(chunk)
|
42
42
|
return if @state == :closed
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
return 0 if chunk.empty?
|
45
|
+
|
46
|
+
chunk = decode_chunk(chunk)
|
47
47
|
|
48
48
|
size = chunk.bytesize
|
49
49
|
@length += size
|
@@ -187,6 +187,14 @@ module HTTPX
|
|
187
187
|
end
|
188
188
|
end
|
189
189
|
|
190
|
+
def decode_chunk(chunk)
|
191
|
+
@inflaters.reverse_each do |inflater|
|
192
|
+
chunk = inflater.call(chunk)
|
193
|
+
end if @inflaters
|
194
|
+
|
195
|
+
chunk
|
196
|
+
end
|
197
|
+
|
190
198
|
def transition(nextstate)
|
191
199
|
case nextstate
|
192
200
|
when :open
|
data/lib/httpx/session.rb
CHANGED
@@ -151,6 +151,16 @@ module HTTPX
|
|
151
151
|
connection
|
152
152
|
end
|
153
153
|
|
154
|
+
def send_request(request, connections, options = request.options)
|
155
|
+
error = catch(:resolve_error) do
|
156
|
+
connection = find_connection(request, connections, options)
|
157
|
+
connection.send(request)
|
158
|
+
end
|
159
|
+
return unless error.is_a?(Error)
|
160
|
+
|
161
|
+
request.emit(:response, ErrorResponse.new(request, error, options))
|
162
|
+
end
|
163
|
+
|
154
164
|
# sets the callbacks on the +connection+ required to process certain specific
|
155
165
|
# connection lifecycle events which deal with request rerouting.
|
156
166
|
def set_connection_callbacks(connection, connections, options)
|
@@ -281,13 +291,7 @@ module HTTPX
|
|
281
291
|
connections = []
|
282
292
|
|
283
293
|
requests.each do |request|
|
284
|
-
|
285
|
-
connection = find_connection(request, connections, request.options)
|
286
|
-
connection.send(request)
|
287
|
-
end
|
288
|
-
next unless error.is_a?(ResolveError)
|
289
|
-
|
290
|
-
request.emit(:response, ErrorResponse.new(request, error, request.options))
|
294
|
+
send_request(request, connections)
|
291
295
|
end
|
292
296
|
|
293
297
|
connections
|
data/lib/httpx/version.rb
CHANGED
data/lib/httpx.rb
CHANGED
@@ -20,7 +20,6 @@ require "httpx/response"
|
|
20
20
|
require "httpx/options"
|
21
21
|
require "httpx/chainable"
|
22
22
|
|
23
|
-
require "mutex_m"
|
24
23
|
# Top-Level Namespace
|
25
24
|
#
|
26
25
|
module HTTPX
|
@@ -31,16 +30,17 @@ module HTTPX
|
|
31
30
|
#
|
32
31
|
module Plugins
|
33
32
|
@plugins = {}
|
34
|
-
@
|
33
|
+
@plugins_mutex = Thread::Mutex.new
|
35
34
|
|
36
35
|
# Loads a plugin based on a name. If the plugin hasn't been loaded, tries to load
|
37
36
|
# it from the load path under "httpx/plugins/" directory.
|
38
37
|
#
|
39
38
|
def self.load_plugin(name)
|
40
39
|
h = @plugins
|
41
|
-
|
40
|
+
m = @plugins_mutex
|
41
|
+
unless (plugin = m.synchronize { h[name] })
|
42
42
|
require "httpx/plugins/#{name}"
|
43
|
-
raise "Plugin #{name} hasn't been registered" unless (plugin =
|
43
|
+
raise "Plugin #{name} hasn't been registered" unless (plugin = m.synchronize { h[name] })
|
44
44
|
end
|
45
45
|
plugin
|
46
46
|
end
|
@@ -49,7 +49,8 @@ module HTTPX
|
|
49
49
|
#
|
50
50
|
def self.register_plugin(name, mod)
|
51
51
|
h = @plugins
|
52
|
-
|
52
|
+
m = @plugins_mutex
|
53
|
+
m.synchronize { h[name] = mod }
|
53
54
|
end
|
54
55
|
end
|
55
56
|
|
@@ -10,6 +10,8 @@ module HTTPX
|
|
10
10
|
def max_redirects: () -> Integer?
|
11
11
|
|
12
12
|
def follow_insecure_redirects: () -> bool?
|
13
|
+
|
14
|
+
def allow_auth_to_other_origins: () -> bool?
|
13
15
|
end
|
14
16
|
|
15
17
|
def self.extra_options: (Options) -> (Options & _FollowRedirectsOptions)
|
@@ -17,12 +19,18 @@ module HTTPX
|
|
17
19
|
module InstanceMethods
|
18
20
|
def max_redirects: (_ToI) -> instance
|
19
21
|
|
22
|
+
def redirect_request_headers: (http_uri original_uri, http_uri redirect_uri, Headers headers, Options & _FollowRedirectsOptions options) -> Headers
|
23
|
+
|
20
24
|
def __get_location_from_response: (Response) -> (URI::HTTP | URI::HTTPS)
|
21
25
|
end
|
22
26
|
|
23
27
|
module RequestMethods
|
24
|
-
|
28
|
+
attr_accessor root_request: instance?
|
29
|
+
|
30
|
+
def redirect_request: () -> instance
|
31
|
+
|
25
32
|
def redirect_request=: (Request) -> void
|
33
|
+
|
26
34
|
def max_redirects: () -> Integer
|
27
35
|
end
|
28
36
|
end
|
@@ -9,7 +9,9 @@ module HTTPX
|
|
9
9
|
def self?.cached_response?: (response response) -> bool
|
10
10
|
|
11
11
|
class Store
|
12
|
-
@store: Hash[String, Array[Response]]
|
12
|
+
@store: Hash[String, Array[Response]]
|
13
|
+
|
14
|
+
@store_mutex: Thread::Mutex
|
13
15
|
|
14
16
|
def lookup: (Request request) -> Response?
|
15
17
|
|
data/sig/response/body.rbs
CHANGED
@@ -44,6 +44,8 @@ module HTTPX
|
|
44
44
|
|
45
45
|
def self.initialize_inflater_by_encoding: (Encoding | String encoding, Response response, ?bytesize: Integer) -> Transcoder::GZIP::Inflater
|
46
46
|
|
47
|
+
def decode_chunk: (String chunk) -> String
|
48
|
+
|
47
49
|
def transition: (Symbol nextstate) -> void
|
48
50
|
|
49
51
|
def _with_same_buffer_pos: [A] () { () -> A } -> A
|
data/sig/session.rbs
CHANGED
@@ -17,10 +17,10 @@ module HTTPX
|
|
17
17
|
|
18
18
|
def build_request: (verb, generic_uri, ?options) -> Request
|
19
19
|
|
20
|
-
|
20
|
+
def initialize: (?options) { (self) -> void } -> void
|
21
|
+
| (?options) -> void
|
21
22
|
|
22
|
-
|
23
|
-
| (?options) -> untyped
|
23
|
+
private
|
24
24
|
|
25
25
|
def pool: -> Pool
|
26
26
|
def on_response: (Request, response) -> void
|
@@ -29,6 +29,8 @@ module HTTPX
|
|
29
29
|
|
30
30
|
def find_connection: (Request request, Array[Connection] connections, Options options) -> Connection
|
31
31
|
|
32
|
+
def send_request: (Request request, Array[Connection] connections, ?Options options) -> void
|
33
|
+
|
32
34
|
def set_connection_callbacks: (Connection connection, Array[Connection] connections, Options options) -> void
|
33
35
|
|
34
36
|
def build_altsvc_connection: (Connection existing_connection, Array[Connection] connections, URI::Generic alt_origin, String origin, Hash[String, String] alt_params, Options options) -> Connection?
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: httpx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tiago Cardoso
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-11-
|
11
|
+
date: 2023-11-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http-2-next
|
@@ -134,6 +134,7 @@ extra_rdoc_files:
|
|
134
134
|
- doc/release_notes/1_1_0.md
|
135
135
|
- doc/release_notes/1_1_1.md
|
136
136
|
- doc/release_notes/1_1_2.md
|
137
|
+
- doc/release_notes/1_1_3.md
|
137
138
|
files:
|
138
139
|
- LICENSE.txt
|
139
140
|
- README.md
|
@@ -239,6 +240,7 @@ files:
|
|
239
240
|
- doc/release_notes/1_1_0.md
|
240
241
|
- doc/release_notes/1_1_1.md
|
241
242
|
- doc/release_notes/1_1_2.md
|
243
|
+
- doc/release_notes/1_1_3.md
|
242
244
|
- lib/httpx.rb
|
243
245
|
- lib/httpx/adapters/datadog.rb
|
244
246
|
- lib/httpx/adapters/faraday.rb
|