httpx 1.2.6 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/doc/release_notes/1_3_0.md +18 -0
- data/doc/release_notes/1_3_1.md +17 -0
- data/lib/httpx/adapters/datadog.rb +8 -4
- data/lib/httpx/adapters/faraday.rb +2 -1
- data/lib/httpx/adapters/webmock.rb +1 -1
- data/lib/httpx/connection/http1.rb +11 -7
- data/lib/httpx/connection/http2.rb +15 -11
- data/lib/httpx/connection.rb +51 -24
- data/lib/httpx/io/tcp.rb +1 -1
- data/lib/httpx/io/unix.rb +1 -1
- data/lib/httpx/options.rb +4 -7
- data/lib/httpx/plugins/aws_sdk_authentication.rb +3 -0
- data/lib/httpx/plugins/aws_sigv4.rb +5 -1
- data/lib/httpx/plugins/circuit_breaker.rb +10 -0
- data/lib/httpx/plugins/cookies.rb +9 -6
- data/lib/httpx/plugins/digest_auth.rb +3 -0
- data/lib/httpx/plugins/expect.rb +5 -0
- data/lib/httpx/plugins/follow_redirects.rb +65 -29
- data/lib/httpx/plugins/grpc.rb +2 -2
- data/lib/httpx/plugins/h2c.rb +1 -1
- data/lib/httpx/plugins/oauth.rb +1 -1
- data/lib/httpx/plugins/proxy/http.rb +9 -4
- data/lib/httpx/plugins/proxy/socks4.rb +1 -1
- data/lib/httpx/plugins/proxy/socks5.rb +1 -1
- data/lib/httpx/plugins/proxy.rb +24 -13
- data/lib/httpx/plugins/retries.rb +25 -4
- data/lib/httpx/plugins/ssrf_filter.rb +4 -1
- data/lib/httpx/pool/synch_pool.rb +93 -0
- data/lib/httpx/pool.rb +1 -1
- data/lib/httpx/request/body.rb +37 -41
- data/lib/httpx/request.rb +42 -13
- data/lib/httpx/resolver/https.rb +7 -5
- data/lib/httpx/resolver/native.rb +1 -1
- data/lib/httpx/resolver/resolver.rb +1 -1
- data/lib/httpx/resolver/system.rb +1 -1
- data/lib/httpx/response.rb +2 -2
- data/lib/httpx/session.rb +34 -19
- data/lib/httpx/timers.rb +1 -1
- data/lib/httpx/version.rb +1 -1
- data/sig/chainable.rbs +2 -2
- data/sig/connection/http1.rbs +2 -2
- data/sig/connection/http2.rbs +17 -17
- data/sig/connection.rbs +10 -4
- data/sig/httpx.rbs +3 -3
- data/sig/io/tcp.rbs +1 -1
- data/sig/io/unix.rbs +1 -1
- data/sig/options.rbs +1 -13
- data/sig/plugins/follow_redirects.rbs +1 -1
- data/sig/plugins/proxy/http.rbs +3 -0
- data/sig/plugins/proxy.rbs +2 -0
- data/sig/plugins/push_promise.rbs +3 -3
- data/sig/pool.rbs +1 -1
- data/sig/request/body.rbs +1 -3
- data/sig/request.rbs +2 -1
- data/sig/resolver/resolver.rbs +2 -2
- data/sig/response.rbs +1 -1
- data/sig/session.rbs +11 -6
- metadata +11 -6
data/lib/httpx/request.rb
CHANGED
@@ -46,12 +46,43 @@ module HTTPX
|
|
46
46
|
# will be +true+ when request body has been completely flushed.
|
47
47
|
def_delegator :@body, :empty?
|
48
48
|
|
49
|
-
# initializes the instance with the given +verb
|
50
|
-
#
|
51
|
-
|
49
|
+
# initializes the instance with the given +verb+ (an upppercase String, ex. 'GEt'),
|
50
|
+
# an absolute or relative +uri+ (either as String or URI::HTTP object), the
|
51
|
+
# request +options+ (instance of HTTPX::Options) and an optional Hash of +params+.
|
52
|
+
#
|
53
|
+
# Besides any of the options documented in HTTPX::Options (which would override or merge with what
|
54
|
+
# +options+ sets), it accepts also the following:
|
55
|
+
#
|
56
|
+
# :params :: hash or array of key-values which will be encoded and set in the query string of request uris.
|
57
|
+
# :body :: to be encoded in the request body payload. can be a String, an IO object (i.e. a File), or an Enumerable.
|
58
|
+
# :form :: hash of array of key-values which will be form-urlencoded- or multipart-encoded in requests body payload.
|
59
|
+
# :json :: hash of array of key-values which will be JSON-encoded in requests body payload.
|
60
|
+
# :xml :: Nokogiri XML nodes which will be encoded in requests body payload.
|
61
|
+
#
|
62
|
+
# :body, :form, :json and :xml are all mutually exclusive, i.e. only one of them gets picked up.
|
63
|
+
def initialize(verb, uri, options, params = EMPTY_HASH)
|
52
64
|
@verb = verb.to_s.upcase
|
53
|
-
@options = Options.new(options)
|
54
65
|
@uri = Utils.to_uri(uri)
|
66
|
+
|
67
|
+
@headers = options.headers.dup
|
68
|
+
merge_headers(params.delete(:headers)) if params.key?(:headers)
|
69
|
+
|
70
|
+
@headers["user-agent"] ||= USER_AGENT
|
71
|
+
@headers["accept"] ||= "*/*"
|
72
|
+
|
73
|
+
# forego compression in the Range request case
|
74
|
+
if @headers.key?("range")
|
75
|
+
@headers.delete("accept-encoding")
|
76
|
+
else
|
77
|
+
@headers["accept-encoding"] ||= options.supported_compression_formats
|
78
|
+
end
|
79
|
+
|
80
|
+
@query_params = params.delete(:params) if params.key?(:params)
|
81
|
+
|
82
|
+
@body = options.request_body_class.new(@headers, options, **params)
|
83
|
+
|
84
|
+
@options = @body.options
|
85
|
+
|
55
86
|
if @uri.relative?
|
56
87
|
origin = @options.origin
|
57
88
|
raise(Error, "invalid URI: #{@uri}") unless origin
|
@@ -61,28 +92,23 @@ module HTTPX
|
|
61
92
|
@uri = origin.merge("#{base_path}#{@uri}")
|
62
93
|
end
|
63
94
|
|
64
|
-
@headers = @options.headers.dup
|
65
|
-
@headers["user-agent"] ||= USER_AGENT
|
66
|
-
@headers["accept"] ||= "*/*"
|
67
|
-
|
68
|
-
@body = @options.request_body_class.new(@headers, @options)
|
69
95
|
@state = :idle
|
70
96
|
@response = nil
|
71
97
|
@peer_address = nil
|
72
98
|
@persistent = @options.persistent
|
73
99
|
end
|
74
100
|
|
75
|
-
# the read timeout
|
101
|
+
# the read timeout defined for this requet.
|
76
102
|
def read_timeout
|
77
103
|
@options.timeout[:read_timeout]
|
78
104
|
end
|
79
105
|
|
80
|
-
# the write timeout
|
106
|
+
# the write timeout defined for this requet.
|
81
107
|
def write_timeout
|
82
108
|
@options.timeout[:write_timeout]
|
83
109
|
end
|
84
110
|
|
85
|
-
# the request timeout
|
111
|
+
# the request timeout defined for this requet.
|
86
112
|
def request_timeout
|
87
113
|
@options.timeout[:request_timeout]
|
88
114
|
end
|
@@ -91,10 +117,12 @@ module HTTPX
|
|
91
117
|
@persistent
|
92
118
|
end
|
93
119
|
|
120
|
+
# if the request contains trailer headers
|
94
121
|
def trailers?
|
95
122
|
defined?(@trailers)
|
96
123
|
end
|
97
124
|
|
125
|
+
# returns an instance of HTTPX::Headers containing the trailer headers
|
98
126
|
def trailers
|
99
127
|
@trailers ||= @options.headers_class.new
|
100
128
|
end
|
@@ -106,6 +134,7 @@ module HTTPX
|
|
106
134
|
:w
|
107
135
|
end
|
108
136
|
|
137
|
+
# merges +h+ into the instance of HTTPX::Headers of the request.
|
109
138
|
def merge_headers(h)
|
110
139
|
@headers = @headers.merge(h)
|
111
140
|
end
|
@@ -172,7 +201,7 @@ module HTTPX
|
|
172
201
|
return @query if defined?(@query)
|
173
202
|
|
174
203
|
query = []
|
175
|
-
if (q = @
|
204
|
+
if (q = @query_params)
|
176
205
|
query << Transcoder::Form.encode(q)
|
177
206
|
end
|
178
207
|
query << @uri.query if @uri.query
|
data/lib/httpx/resolver/https.rb
CHANGED
@@ -71,9 +71,11 @@ module HTTPX
|
|
71
71
|
connection = @options.connection_class.new(@uri, @options.merge(ssl: { alpn_protocols: %w[h2] }))
|
72
72
|
@pool.init_connection(connection, @options)
|
73
73
|
# only explicity emit addresses if connection didn't pre-resolve, i.e. it's not an IP.
|
74
|
-
|
75
|
-
|
76
|
-
|
74
|
+
catch(:coalesced) do
|
75
|
+
@building_connection = false
|
76
|
+
emit_addresses(connection, @family, @uri_addresses) unless connection.addresses
|
77
|
+
connection
|
78
|
+
end
|
77
79
|
end
|
78
80
|
end
|
79
81
|
|
@@ -199,7 +201,7 @@ module HTTPX
|
|
199
201
|
@queries.delete_if { |_, conn| connection == conn }
|
200
202
|
|
201
203
|
Resolver.cached_lookup_set(hostname, @family, addresses) if @resolver_options[:cache]
|
202
|
-
emit_addresses(connection, @family, addresses.map { |addr| addr["data"] })
|
204
|
+
catch(:coalesced) { emit_addresses(connection, @family, addresses.map { |addr| addr["data"] }) }
|
203
205
|
end
|
204
206
|
end
|
205
207
|
return if @connections.empty?
|
@@ -219,7 +221,7 @@ module HTTPX
|
|
219
221
|
uri.query = URI.encode_www_form(params)
|
220
222
|
request = rklass.new("GET", uri, @options)
|
221
223
|
else
|
222
|
-
request = rklass.new("POST", uri, @options
|
224
|
+
request = rklass.new("POST", uri, @options, body: [payload])
|
223
225
|
request.headers["content-type"] = "application/dns-message"
|
224
226
|
end
|
225
227
|
request.headers["accept"] = "application/dns-message"
|
@@ -329,7 +329,7 @@ module HTTPX
|
|
329
329
|
@timeouts.delete(connection.origin.host)
|
330
330
|
@connections.delete(connection)
|
331
331
|
Resolver.cached_lookup_set(connection.origin.host, @family, addresses) if @resolver_options[:cache]
|
332
|
-
emit_addresses(connection, @family, addresses.map { |addr| addr["data"] })
|
332
|
+
catch(:coalesced) { emit_addresses(connection, @family, addresses.map { |addr| addr["data"] }) }
|
333
333
|
end
|
334
334
|
end
|
335
335
|
return emit(:close) if @connections.empty?
|
@@ -127,7 +127,7 @@ module HTTPX
|
|
127
127
|
@queries.delete(pair)
|
128
128
|
|
129
129
|
family, connection = pair
|
130
|
-
emit_addresses(connection, family, addrs)
|
130
|
+
catch(:coalesced) { emit_addresses(connection, family, addrs) }
|
131
131
|
when ERROR
|
132
132
|
*pair, error = @pipe_mutex.synchronize { @ips.pop }
|
133
133
|
@queries.delete(pair)
|
data/lib/httpx/response.rb
CHANGED
@@ -247,11 +247,11 @@ module HTTPX
|
|
247
247
|
# the IP address of the peer server.
|
248
248
|
def_delegator :@request, :peer_address
|
249
249
|
|
250
|
-
def initialize(request, error
|
250
|
+
def initialize(request, error)
|
251
251
|
@request = request
|
252
252
|
@response = request.response if request.response.is_a?(Response)
|
253
253
|
@error = error
|
254
|
-
@options =
|
254
|
+
@options = request.options
|
255
255
|
log_exception(@error)
|
256
256
|
end
|
257
257
|
|
data/lib/httpx/session.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module HTTPX
|
4
|
+
EMPTY_HASH = {}.freeze
|
5
|
+
|
4
6
|
# Class implementing the APIs being used publicly.
|
5
7
|
#
|
6
8
|
# HTTPX.get(..) #=> delegating to an internal HTTPX::Session object.
|
@@ -9,8 +11,6 @@ module HTTPX
|
|
9
11
|
include Loggable
|
10
12
|
include Chainable
|
11
13
|
|
12
|
-
EMPTY_HASH = {}.freeze
|
13
|
-
|
14
14
|
# initializes the session with a set of +options+, which will be shared by all
|
15
15
|
# requests sent from it.
|
16
16
|
#
|
@@ -65,10 +65,10 @@ module HTTPX
|
|
65
65
|
# resp1, resp2 = session.request(["POST", "https://server.org/a", form: { "foo" => "bar" }], ["GET", "https://server.org/b"])
|
66
66
|
# resp1, resp2 = session.request("GET", ["https://server.org/a", "https://server.org/b"], headers: { "x-api-token" => "TOKEN" })
|
67
67
|
#
|
68
|
-
def request(*args, **
|
68
|
+
def request(*args, **params)
|
69
69
|
raise ArgumentError, "must perform at least one request" if args.empty?
|
70
70
|
|
71
|
-
requests = args.first.is_a?(Request) ? args : build_requests(*args,
|
71
|
+
requests = args.first.is_a?(Request) ? args : build_requests(*args, params)
|
72
72
|
responses = send_requests(*requests)
|
73
73
|
return responses.first if responses.size == 1
|
74
74
|
|
@@ -81,10 +81,9 @@ module HTTPX
|
|
81
81
|
#
|
82
82
|
# req = session.build_request("GET", "https://server.com")
|
83
83
|
# resp = session.request(req)
|
84
|
-
def build_request(verb, uri, options =
|
85
|
-
rklass =
|
86
|
-
|
87
|
-
request = rklass.new(verb, uri, options)
|
84
|
+
def build_request(verb, uri, params = EMPTY_HASH, options = @options)
|
85
|
+
rklass = options.request_class
|
86
|
+
request = rklass.new(verb, uri, options, params)
|
88
87
|
request.persistent = @persistent
|
89
88
|
set_request_callbacks(request)
|
90
89
|
request
|
@@ -126,6 +125,7 @@ module HTTPX
|
|
126
125
|
connection
|
127
126
|
end
|
128
127
|
|
128
|
+
# sends the +request+ to the corresponding HTTPX::Connection
|
129
129
|
def send_request(request, connections, options = request.options)
|
130
130
|
error = catch(:resolve_error) do
|
131
131
|
connection = find_connection(request, connections, options)
|
@@ -133,7 +133,7 @@ module HTTPX
|
|
133
133
|
end
|
134
134
|
return unless error.is_a?(Error)
|
135
135
|
|
136
|
-
request.emit(:response, ErrorResponse.new(request, error
|
136
|
+
request.emit(:response, ErrorResponse.new(request, error))
|
137
137
|
end
|
138
138
|
|
139
139
|
# sets the callbacks on the +connection+ required to process certain specific
|
@@ -192,22 +192,26 @@ module HTTPX
|
|
192
192
|
end
|
193
193
|
|
194
194
|
# returns a set of HTTPX::Request objects built from the given +args+ and +options+.
|
195
|
-
def build_requests(*args,
|
196
|
-
request_options = @options.merge(options)
|
197
|
-
|
195
|
+
def build_requests(*args, params)
|
198
196
|
requests = if args.size == 1
|
199
197
|
reqs = args.first
|
200
|
-
|
201
|
-
|
198
|
+
# TODO: find a way to make requests share same options object
|
199
|
+
reqs.map do |verb, uri, ps = EMPTY_HASH|
|
200
|
+
request_params = params
|
201
|
+
request_params = request_params.merge(ps) unless ps.empty?
|
202
|
+
build_request(verb, uri, request_params)
|
202
203
|
end
|
203
204
|
else
|
204
205
|
verb, uris = args
|
205
206
|
if uris.respond_to?(:each)
|
206
|
-
|
207
|
-
|
207
|
+
# TODO: find a way to make requests share same options object
|
208
|
+
uris.enum_for(:each).map do |uri, ps = EMPTY_HASH|
|
209
|
+
request_params = params
|
210
|
+
request_params = request_params.merge(ps) unless ps.empty?
|
211
|
+
build_request(verb, uri, request_params)
|
208
212
|
end
|
209
213
|
else
|
210
|
-
[build_request(verb, uris,
|
214
|
+
[build_request(verb, uris, params)]
|
211
215
|
end
|
212
216
|
end
|
213
217
|
raise ArgumentError, "wrong number of URIs (given 0, expect 1..+1)" if requests.empty?
|
@@ -228,6 +232,14 @@ module HTTPX
|
|
228
232
|
end
|
229
233
|
end
|
230
234
|
|
235
|
+
def deactivate_connection(request, connections, options)
|
236
|
+
conn = connections.find do |c|
|
237
|
+
c.match?(request.uri, options)
|
238
|
+
end
|
239
|
+
|
240
|
+
pool.deactivate(conn) if conn
|
241
|
+
end
|
242
|
+
|
231
243
|
# sends an array of HTTPX::Request +requests+, returns the respective array of HTTPX::Response objects.
|
232
244
|
def send_requests(*requests)
|
233
245
|
connections = _send_requests(requests)
|
@@ -258,6 +270,7 @@ module HTTPX
|
|
258
270
|
return responses unless request
|
259
271
|
|
260
272
|
catch(:coalesced) { pool.next_tick } until (response = fetch_response(request, connections, request.options))
|
273
|
+
request.emit(:complete, response)
|
261
274
|
|
262
275
|
responses << response
|
263
276
|
requests.shift
|
@@ -271,14 +284,16 @@ module HTTPX
|
|
271
284
|
# opportunity to traverse the requests, hence we're returning only a fraction of the errors
|
272
285
|
# we were supposed to. This effectively fetches the existing responses and return them.
|
273
286
|
while (request = requests.shift)
|
274
|
-
|
287
|
+
response = fetch_response(request, connections, request.options)
|
288
|
+
request.emit(:complete, response) if response
|
289
|
+
responses << response
|
275
290
|
end
|
276
291
|
break
|
277
292
|
end
|
278
293
|
responses
|
279
294
|
ensure
|
280
295
|
if @persistent
|
281
|
-
pool.deactivate(connections)
|
296
|
+
pool.deactivate(*connections)
|
282
297
|
else
|
283
298
|
close(connections)
|
284
299
|
end
|
data/lib/httpx/timers.rb
CHANGED
@@ -43,7 +43,7 @@ module HTTPX
|
|
43
43
|
|
44
44
|
elapsed_time = Utils.elapsed_time(@next_interval_at)
|
45
45
|
|
46
|
-
@intervals.
|
46
|
+
@intervals = @intervals.drop_while { |interval| interval.elapse(elapsed_time) <= 0 }
|
47
47
|
|
48
48
|
@next_interval_at = nil if @intervals.empty?
|
49
49
|
end
|
data/lib/httpx/version.rb
CHANGED
data/sig/chainable.rbs
CHANGED
@@ -3,8 +3,8 @@ module HTTPX
|
|
3
3
|
def request: (*Request, **untyped) -> Array[response]
|
4
4
|
| (Request, **untyped) -> response
|
5
5
|
| (verb, uri | [uri], **untyped) -> response
|
6
|
-
| (Array[[verb, uri] | [verb, uri,
|
7
|
-
| (verb, _Each[uri | [uri,
|
6
|
+
| (Array[[verb, uri] | [verb, uri, request_params]], **untyped) -> Array[response]
|
7
|
+
| (verb, _Each[uri | [uri, request_params]], **untyped) -> Array[response]
|
8
8
|
|
9
9
|
def accept: (String) -> Session
|
10
10
|
def wrap: () { (Session) -> void } -> void
|
data/sig/connection/http1.rbs
CHANGED
@@ -38,7 +38,7 @@ module HTTPX
|
|
38
38
|
|
39
39
|
def consume: () -> void
|
40
40
|
|
41
|
-
def handle_error: (StandardError ex) -> void
|
41
|
+
def handle_error: (StandardError ex, ?Request? request) -> void
|
42
42
|
|
43
43
|
def on_start: () -> void
|
44
44
|
|
@@ -58,7 +58,7 @@ module HTTPX
|
|
58
58
|
|
59
59
|
private
|
60
60
|
|
61
|
-
def initialize: (Buffer, options) -> untyped
|
61
|
+
def initialize: (Buffer buffer, Options options) -> untyped
|
62
62
|
|
63
63
|
def manage_connection: (Request request, Response response) -> void
|
64
64
|
|
data/sig/connection/http2.rbs
CHANGED
@@ -5,7 +5,7 @@ module HTTPX
|
|
5
5
|
|
6
6
|
MAX_CONCURRENT_REQUESTS: Integer
|
7
7
|
|
8
|
-
attr_reader streams: Hash[Request,
|
8
|
+
attr_reader streams: Hash[Request, ::HTTP2::Stream]
|
9
9
|
attr_reader pending: Array[Request]
|
10
10
|
|
11
11
|
@options: Options
|
@@ -32,7 +32,7 @@ module HTTPX
|
|
32
32
|
|
33
33
|
def consume: () -> void
|
34
34
|
|
35
|
-
def handle_error: (StandardError ex) -> void
|
35
|
+
def handle_error: (StandardError ex, ?Request? request) -> void
|
36
36
|
|
37
37
|
def ping: () -> void
|
38
38
|
|
@@ -42,35 +42,35 @@ module HTTPX
|
|
42
42
|
|
43
43
|
private
|
44
44
|
|
45
|
-
def initialize: (Buffer, options) -> untyped
|
45
|
+
def initialize: (Buffer buffer, Options options) -> untyped
|
46
46
|
|
47
47
|
def send_pending: () -> void
|
48
48
|
|
49
49
|
def set_protocol_headers: (Request) -> _Each[[String, String]]
|
50
50
|
|
51
|
-
def handle: (Request request,
|
51
|
+
def handle: (Request request, ::HTTP2::Stream stream) -> void
|
52
52
|
|
53
53
|
def init_connection: () -> void
|
54
54
|
|
55
|
-
def handle_stream: (
|
55
|
+
def handle_stream: (::HTTP2::Stream stream, Request request) -> void
|
56
56
|
|
57
57
|
def join_headline: (Request request) -> String
|
58
58
|
|
59
|
-
def join_headers: (
|
59
|
+
def join_headers: (::HTTP2::Stream stream, Request request) -> void
|
60
60
|
|
61
|
-
def join_trailers: (
|
61
|
+
def join_trailers: (::HTTP2::Stream stream, Request request) -> void
|
62
62
|
|
63
|
-
def join_body: (
|
63
|
+
def join_body: (::HTTP2::Stream stream, Request request) -> void
|
64
64
|
|
65
|
-
def on_stream_headers: (
|
65
|
+
def on_stream_headers: (::HTTP2::Stream stream, Request request, Array[[String, String]] headers) -> void
|
66
66
|
|
67
|
-
def on_stream_trailers: (
|
67
|
+
def on_stream_trailers: (::HTTP2::Stream stream, Response response, Array[[String, String]] headers) -> void
|
68
68
|
|
69
|
-
def on_stream_data: (
|
69
|
+
def on_stream_data: (::HTTP2::Stream stream, Request request, String data) -> void
|
70
70
|
|
71
|
-
def on_stream_refuse: (
|
71
|
+
def on_stream_refuse: (::HTTP2::Stream stream, Request request, StandardError error) -> void
|
72
72
|
|
73
|
-
def on_stream_close: (
|
73
|
+
def on_stream_close: (::HTTP2::Stream stream, Request request, (Symbol | StandardError)? error) -> void
|
74
74
|
|
75
75
|
def on_frame: (string bytes) -> void
|
76
76
|
|
@@ -78,13 +78,13 @@ module HTTPX
|
|
78
78
|
|
79
79
|
def on_close: (Integer last_frame, Symbol? error, String? payload) -> void
|
80
80
|
|
81
|
-
def on_frame_sent: (
|
81
|
+
def on_frame_sent: (::HTTP2::frame) -> void
|
82
82
|
|
83
|
-
def on_frame_received: (
|
83
|
+
def on_frame_received: (::HTTP2::frame) -> void
|
84
84
|
|
85
|
-
def on_altsvc: (String origin,
|
85
|
+
def on_altsvc: (String origin, ::HTTP2::frame) -> void
|
86
86
|
|
87
|
-
def on_promise: (
|
87
|
+
def on_promise: (::HTTP2::Stream) -> void
|
88
88
|
|
89
89
|
def on_origin: (String) -> void
|
90
90
|
|
data/sig/connection.rbs
CHANGED
@@ -93,9 +93,9 @@ module HTTPX
|
|
93
93
|
|
94
94
|
private
|
95
95
|
|
96
|
-
def initialize: (http_uri uri, options) -> void
|
96
|
+
def initialize: (http_uri uri, Options options) -> void
|
97
97
|
|
98
|
-
def initialize_type: (http_uri uri, Options) -> io_type
|
98
|
+
def initialize_type: (http_uri uri, Options options) -> io_type
|
99
99
|
|
100
100
|
def connect: () -> void
|
101
101
|
|
@@ -119,14 +119,20 @@ module HTTPX
|
|
119
119
|
|
120
120
|
def build_socket: (?Array[ipaddr]? addrs) -> (TCP | SSL | UNIX)
|
121
121
|
|
122
|
-
def on_error: (HTTPX::TimeoutError | Error | StandardError error) -> void
|
122
|
+
def on_error: (HTTPX::TimeoutError | Error | StandardError error, ?Request? request) -> void
|
123
123
|
|
124
|
-
def handle_error: (StandardError error) -> void
|
124
|
+
def handle_error: (StandardError error, ?Request? request) -> void
|
125
125
|
|
126
126
|
def purge_after_closed: () -> void
|
127
127
|
|
128
128
|
def set_request_timeouts: (Request request) -> void
|
129
129
|
|
130
|
+
def set_request_read_timeout: (Request request) -> void
|
131
|
+
|
132
|
+
def set_request_write_timeout: (Request request) -> void
|
133
|
+
|
134
|
+
def set_request_request_timeout: (Request request) -> void
|
135
|
+
|
130
136
|
def write_timeout_callback: (Request request, Numeric write_timeout) -> void
|
131
137
|
|
132
138
|
def read_timeout_callback: (Request request, Numeric read_timeout, ?singleton(RequestTimeoutError) error_type) -> void
|
data/sig/httpx.rbs
CHANGED
@@ -9,9 +9,9 @@ module HTTPX
|
|
9
9
|
type uri = http_uri | string
|
10
10
|
type generic_uri = String | URI::Generic
|
11
11
|
|
12
|
-
type verb =
|
13
|
-
|
14
|
-
|
12
|
+
type verb = String
|
13
|
+
|
14
|
+
type request_params = Hash[Symbol, untyped]
|
15
15
|
|
16
16
|
type ip_family = Integer #Socket::AF_INET6 | Socket::AF_INET
|
17
17
|
|
data/sig/io/tcp.rbs
CHANGED
@@ -15,7 +15,7 @@ module HTTPX
|
|
15
15
|
alias host ip
|
16
16
|
|
17
17
|
# TODO: lift when https://github.com/ruby/rbs/issues/1497 fixed
|
18
|
-
def initialize: (URI::Generic origin, Array[ipaddr]? addresses,
|
18
|
+
def initialize: (URI::Generic origin, Array[ipaddr]? addresses, Options options) ?{ (instance) -> void } -> void
|
19
19
|
|
20
20
|
def add_addresses: (Array[ipaddr] addrs) -> void
|
21
21
|
|
data/sig/io/unix.rbs
CHANGED
data/sig/options.rbs
CHANGED
@@ -63,19 +63,7 @@ module HTTPX
|
|
63
63
|
# decompress_response_body
|
64
64
|
attr_reader decompress_response_body: bool
|
65
65
|
|
66
|
-
#
|
67
|
-
attr_reader params: Transcoder::urlencoded_input?
|
68
|
-
|
69
|
-
# form
|
70
|
-
attr_reader form: Transcoder::urlencoded_input?
|
71
|
-
|
72
|
-
# json
|
73
|
-
attr_reader json: _ToJson?
|
74
|
-
|
75
|
-
# body
|
76
|
-
attr_reader body: bodyIO?
|
77
|
-
|
78
|
-
# body
|
66
|
+
# origin
|
79
67
|
attr_reader origin: URI::Generic?
|
80
68
|
|
81
69
|
# base_path
|
@@ -24,7 +24,7 @@ module HTTPX
|
|
24
24
|
module InstanceMethods
|
25
25
|
def max_redirects: (_ToI) -> instance
|
26
26
|
|
27
|
-
def
|
27
|
+
def handle_after_redirect_request: (http_uri original_uri, http_uri redirect_uri, Request request, Options & _FollowRedirectsOptions options) -> void
|
28
28
|
|
29
29
|
def __get_location_from_response: (Response) -> http_uri
|
30
30
|
end
|
data/sig/plugins/proxy/http.rbs
CHANGED
data/sig/plugins/proxy.rbs
CHANGED
@@ -9,9 +9,9 @@ module HTTPX
|
|
9
9
|
module InstanceMethods
|
10
10
|
private
|
11
11
|
|
12
|
-
def promise_headers: () -> Hash[
|
13
|
-
def __on_promise_request: (Connection::HTTP2,
|
14
|
-
def __on_promise_response: (Connection::HTTP2,
|
12
|
+
def promise_headers: () -> Hash[::HTTP2::Stream, Request]
|
13
|
+
def __on_promise_request: (Connection::HTTP2, ::HTTP2::Stream, headers_input) -> void
|
14
|
+
def __on_promise_response: (Connection::HTTP2, ::HTTP2::Stream, headers_input) -> void
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
data/sig/pool.rbs
CHANGED
data/sig/request/body.rbs
CHANGED
@@ -4,7 +4,7 @@ module HTTPX
|
|
4
4
|
@body: body_encoder?
|
5
5
|
@unbounded_body: bool
|
6
6
|
|
7
|
-
def initialize: (Headers headers, Options options) -> void
|
7
|
+
def initialize: (Headers headers, Options options, ?body: bodyIO, ?form: Transcoder::urlencoded_input?, ?json: _ToJson?, **untyped) -> void
|
8
8
|
|
9
9
|
def each: () { (String) -> void } -> void
|
10
10
|
| () -> Enumerable[String]
|
@@ -25,8 +25,6 @@ module HTTPX
|
|
25
25
|
|
26
26
|
private
|
27
27
|
|
28
|
-
def initialize_body: (Options options) -> void
|
29
|
-
|
30
28
|
def self.initialize_deflater_body: (body_encoder body, Encoding | String encoding) -> body_encoder
|
31
29
|
end
|
32
30
|
|
data/sig/request.rbs
CHANGED
@@ -19,12 +19,13 @@ module HTTPX
|
|
19
19
|
|
20
20
|
attr_writer persistent: bool
|
21
21
|
|
22
|
+
@query_params: Hash[interned, untyped]?
|
22
23
|
@trailers: Headers?
|
23
24
|
@informational_status: Integer?
|
24
25
|
@query: String?
|
25
26
|
@drainer: Enumerator[String, void]?
|
26
27
|
|
27
|
-
def initialize: (Symbol | String, generic_uri, ?
|
28
|
+
def initialize: (Symbol | String verb, generic_uri uri, Options options, ?request_params params) -> untyped
|
28
29
|
|
29
30
|
def interests: () -> (:r | :w)
|
30
31
|
|
data/sig/resolver/resolver.rbs
CHANGED
@@ -26,9 +26,9 @@ module HTTPX
|
|
26
26
|
|
27
27
|
def emit_resolved_connection: (Connection connection, Array[IPAddr] addresses, bool early_resolve) -> void
|
28
28
|
|
29
|
-
def initialize: (ip_family? family,
|
29
|
+
def initialize: (ip_family? family, Options options) -> void
|
30
30
|
|
31
|
-
def early_resolve: (Connection connection, ?hostname: String) ->
|
31
|
+
def early_resolve: (Connection connection, ?hostname: String) -> boolish
|
32
32
|
|
33
33
|
def emit_resolve_error: (Connection connection, ?String hostname, ?StandardError) -> void
|
34
34
|
|