httpx 0.18.0 → 0.18.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 372f89cdf05727a32d23467503299ae77831cb5d23356467dc0c7f3a22bbfd0c
4
- data.tar.gz: bbb3df9079bf4f5a449f37f34dd6b1d3208a978e8a8eaa7fdd69ea9d1829ac6c
3
+ metadata.gz: dc0ed6728252132961087b7747743f0011f2f8100eb9b242080b7ac29ce68752
4
+ data.tar.gz: 68c3c8f592d2e7599b7a5dcca4e9f73e7d61aba743bacb17d4c276c404203f5e
5
5
  SHA512:
6
- metadata.gz: 38211af1e56fbc823ad0780198579ff11d4fa4b5b64677af95e78361f8b274d0dc43b124697358f1a0b17c2d45e4cdd620f97ca983af7fa60ce59515e9b51785
7
- data.tar.gz: 2c9d48f3ad7a499046ab94ac3ee1831f1623ce44990de0f08320ac6e5ce3767ca938381cd7b96c3799477f201a811aa5c446d62f88bd58c6e1e0afd84c53af75
6
+ metadata.gz: 162b4b96df5b3b76bccdbe5940ed09aac4dea1d4b019321b07f859912d5d9fb770080d69198c70e4fd69a745723e250bcfce34e76baa83fdf3352f63d0b14620
7
+ data.tar.gz: 63099247e157ddd0b1f01bdbd459a51500b5bb7ac0a624a93c09958efbd10ec2c79027c5bb932ccacfa3335a8f9d0c7691b835ac30eabbe1ed6f7ced3a47421d
@@ -0,0 +1,12 @@
1
+ # 0.18.1
2
+
3
+ ## Bugfixes
4
+
5
+ * HTTP/1.1 pipelining logs were logging the previously-buffered requests all together for each triggered request, which created some confusion for users when reporting errors. This has been fixed.
6
+ * HTTP/2 coalescing is now skipped when performing TLS connections with VERIFY_NONE.
7
+ * HTTP/2 peer GOAWAY frames will now result in a (retryable) connection error, instead of being ignored and leaving a "ghost" connection behind.
8
+ * fixed total timeout call which was not raising the exception.
9
+
10
+ ## Chore
11
+
12
+ This gem now requires MFA-based gem releases.
@@ -36,6 +36,8 @@ module HTTPX
36
36
 
37
37
  request = @requests.first
38
38
 
39
+ return unless request
40
+
39
41
  return :w if request.interests == :w || !@buffer.empty?
40
42
 
41
43
  :r
@@ -313,8 +315,9 @@ module HTTPX
313
315
  end
314
316
 
315
317
  def join_headers(request)
316
- @buffer << "#{request.verb.to_s.upcase} #{headline_uri(request)} HTTP/#{@version.join(".")}" << CRLF
317
- log(color: :yellow) { "<- HEADLINE: #{@buffer.to_s.chomp.inspect}" }
318
+ headline = "#{request.verb.to_s.upcase} #{headline_uri(request)} HTTP/#{@version.join(".")}"
319
+ @buffer << headline << CRLF
320
+ log(color: :yellow) { "<- HEADLINE: #{headline.chomp.inspect}" }
318
321
  extra_headers = set_protocol_headers(request)
319
322
  join_headers2(request.headers.each(extra_headers))
320
323
  log { "<- " }
@@ -16,6 +16,12 @@ module HTTPX
16
16
  end
17
17
  end
18
18
 
19
+ class GoawayError < Error
20
+ def initialize
21
+ super(0, :no_error)
22
+ end
23
+ end
24
+
19
25
  attr_reader :streams, :pending
20
26
 
21
27
  def initialize(buffer, options)
@@ -302,7 +308,7 @@ module HTTPX
302
308
  @drains.delete(request)
303
309
  @streams.delete(request)
304
310
 
305
- if error && error != :no_error
311
+ if error
306
312
  ex = Error.new(stream.id, error)
307
313
  ex.set_backtrace(caller)
308
314
  response = ErrorResponse.new(request, ex, request.options)
@@ -344,9 +350,16 @@ module HTTPX
344
350
 
345
351
  def on_close(_last_frame, error, _payload)
346
352
  is_connection_closed = @connection.state == :closed
347
- if error && error != :no_error
353
+ if error
348
354
  @buffer.clear if is_connection_closed
349
- ex = Error.new(0, error)
355
+ if error == :no_error
356
+ ex = GoawayError.new
357
+ @pending.unshift(*@streams.keys)
358
+ @drains.clear
359
+ @streams.clear
360
+ else
361
+ ex = Error.new(0, error)
362
+ end
350
363
  ex.set_backtrace(caller)
351
364
  handle_error(ex)
352
365
  end
@@ -117,7 +117,8 @@ module HTTPX
117
117
  def coalescable?(connection)
118
118
  if @io.protocol == "h2" &&
119
119
  @origin.scheme == "https" &&
120
- connection.origin.scheme == "https"
120
+ connection.origin.scheme == "https" &&
121
+ @io.can_verify_peer?
121
122
  @io.verify_hostname(connection.origin.host)
122
123
  else
123
124
  @origin == connection.origin
@@ -241,7 +242,7 @@ module HTTPX
241
242
  if elapsed_time.negative?
242
243
  ex = TotalTimeoutError.new(@total_timeout, "Timed out after #{@total_timeout} seconds")
243
244
  ex.set_backtrace(caller)
244
- on_error(@total_timeout)
245
+ on_error(ex)
245
246
  return
246
247
  end
247
248
 
@@ -463,6 +464,7 @@ module HTTPX
463
464
  transition(:closing)
464
465
  transition(:closed)
465
466
  emit(:reset)
467
+
466
468
  @parser.reset if @parser
467
469
  transition(:idle)
468
470
  transition(:open)
data/lib/httpx/io/ssl.rb CHANGED
@@ -27,6 +27,10 @@ module HTTPX
27
27
  super
28
28
  end
29
29
 
30
+ def can_verify_peer?
31
+ @ctx.verify_mode == OpenSSL::SSL::VERIFY_PEER
32
+ end
33
+
30
34
  def verify_hostname(host)
31
35
  return false if @ctx.verify_mode == OpenSSL::SSL::VERIFY_NONE
32
36
  return false if !@io.respond_to?(:peer_cert) || @io.peer_cert.nil?
@@ -12,16 +12,19 @@ module HTTPX
12
12
  # TODO: pass max_retries in a configure/load block
13
13
 
14
14
  IDEMPOTENT_METHODS = %i[get options head put delete].freeze
15
- RETRYABLE_ERRORS = [IOError,
16
- EOFError,
17
- Errno::ECONNRESET,
18
- Errno::ECONNABORTED,
19
- Errno::EPIPE,
20
- TLSError,
21
- TimeoutError,
22
- Parser::Error,
23
- Errno::EINVAL,
24
- Errno::ETIMEDOUT].freeze
15
+ RETRYABLE_ERRORS = [
16
+ IOError,
17
+ EOFError,
18
+ Errno::ECONNRESET,
19
+ Errno::ECONNABORTED,
20
+ Errno::EPIPE,
21
+ Errno::EINVAL,
22
+ Errno::ETIMEDOUT,
23
+ Parser::Error,
24
+ TLSError,
25
+ TimeoutError,
26
+ Connection::HTTP2::GoawayError,
27
+ ].freeze
25
28
  DEFAULT_JITTER = ->(interval) { interval * (0.5 * (1 + rand)) }
26
29
 
27
30
  if ENV.key?("HTTPX_NO_JITTER")
data/lib/httpx/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HTTPX
4
- VERSION = "0.18.0"
4
+ VERSION = "0.18.1"
5
5
  end
@@ -15,6 +15,11 @@ module HTTPX
15
15
  @max_requests: Integer
16
16
  @parser: Parser::HTTP1
17
17
  @buffer: Buffer
18
+ @version: [Integer, Integer]
19
+ @handshake_completed: bool
20
+ @pipelining: bool
21
+
22
+ @request: Request?
18
23
 
19
24
  def interests: () -> io_interests?
20
25
 
@@ -92,5 +92,8 @@ module HTTPX
92
92
 
93
93
  class Error < ::HTTPX::Error
94
94
  end
95
+
96
+ class GoawayError < Error
97
+ end
95
98
  end
96
99
  end
metadata CHANGED
@@ -1,24 +1,24 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: httpx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.0
4
+ version: 0.18.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tiago Cardoso
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-02 00:00:00.000000000 Z
11
+ date: 2021-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http-2-next
15
+ prerelease: false
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
18
  - - ">="
18
19
  - !ruby/object:Gem::Version
19
20
  version: 0.4.1
20
21
  type: :runtime
21
- prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
@@ -33,58 +33,59 @@ extra_rdoc_files:
33
33
  - LICENSE.txt
34
34
  - README.md
35
35
  - doc/release_notes/0_0_1.md
36
- - doc/release_notes/0_0_2.md
37
- - doc/release_notes/0_0_3.md
38
- - doc/release_notes/0_0_4.md
36
+ - doc/release_notes/0_15_4.md
37
+ - doc/release_notes/0_14_5.md
38
+ - doc/release_notes/0_18_1.md
39
+ - doc/release_notes/0_1_0.md
39
40
  - doc/release_notes/0_0_5.md
40
- - doc/release_notes/0_10_0.md
41
- - doc/release_notes/0_10_1.md
42
- - doc/release_notes/0_10_2.md
43
- - doc/release_notes/0_11_0.md
44
- - doc/release_notes/0_11_1.md
41
+ - doc/release_notes/0_15_0.md
42
+ - doc/release_notes/0_14_1.md
43
+ - doc/release_notes/0_0_4.md
44
+ - doc/release_notes/0_15_1.md
45
+ - doc/release_notes/0_14_0.md
46
+ - doc/release_notes/0_14_4.md
47
+ - doc/release_notes/0_18_0.md
48
+ - doc/release_notes/0_6_5.md
49
+ - doc/release_notes/0_13_0.md
50
+ - doc/release_notes/0_6_1.md
45
51
  - doc/release_notes/0_11_2.md
52
+ - doc/release_notes/0_7_0.md
53
+ - doc/release_notes/0_6_0.md
54
+ - doc/release_notes/0_10_2.md
46
55
  - doc/release_notes/0_11_3.md
47
- - doc/release_notes/0_12_0.md
48
- - doc/release_notes/0_13_0.md
56
+ - doc/release_notes/0_8_2.md
57
+ - doc/release_notes/0_6_4.md
49
58
  - doc/release_notes/0_13_1.md
59
+ - doc/release_notes/0_12_0.md
60
+ - doc/release_notes/0_9_0.md
61
+ - doc/release_notes/0_6_3.md
62
+ - doc/release_notes/0_10_1.md
63
+ - doc/release_notes/0_11_0.md
64
+ - doc/release_notes/0_8_1.md
65
+ - doc/release_notes/0_5_0.md
66
+ - doc/release_notes/0_6_7.md
50
67
  - doc/release_notes/0_13_2.md
51
- - doc/release_notes/0_14_0.md
52
- - doc/release_notes/0_14_1.md
53
- - doc/release_notes/0_14_2.md
54
- - doc/release_notes/0_14_3.md
55
- - doc/release_notes/0_14_4.md
56
- - doc/release_notes/0_14_5.md
57
- - doc/release_notes/0_15_0.md
58
- - doc/release_notes/0_15_1.md
59
- - doc/release_notes/0_15_2.md
60
- - doc/release_notes/0_15_3.md
61
- - doc/release_notes/0_15_4.md
62
- - doc/release_notes/0_16_0.md
63
- - doc/release_notes/0_16_1.md
64
- - doc/release_notes/0_17_0.md
65
- - doc/release_notes/0_18_0.md
66
- - doc/release_notes/0_1_0.md
67
- - doc/release_notes/0_2_0.md
68
- - doc/release_notes/0_2_1.md
69
- - doc/release_notes/0_3_0.md
70
- - doc/release_notes/0_3_1.md
71
- - doc/release_notes/0_4_0.md
72
68
  - doc/release_notes/0_4_1.md
73
- - doc/release_notes/0_5_0.md
74
69
  - doc/release_notes/0_5_1.md
75
- - doc/release_notes/0_6_0.md
76
- - doc/release_notes/0_6_1.md
77
- - doc/release_notes/0_6_2.md
78
- - doc/release_notes/0_6_3.md
79
- - doc/release_notes/0_6_4.md
80
- - doc/release_notes/0_6_5.md
81
70
  - doc/release_notes/0_6_6.md
82
- - doc/release_notes/0_6_7.md
83
- - doc/release_notes/0_7_0.md
71
+ - doc/release_notes/0_4_0.md
72
+ - doc/release_notes/0_6_2.md
73
+ - doc/release_notes/0_10_0.md
74
+ - doc/release_notes/0_11_1.md
84
75
  - doc/release_notes/0_8_0.md
85
- - doc/release_notes/0_8_1.md
86
- - doc/release_notes/0_8_2.md
87
- - doc/release_notes/0_9_0.md
76
+ - doc/release_notes/0_3_0.md
77
+ - doc/release_notes/0_15_2.md
78
+ - doc/release_notes/0_14_3.md
79
+ - doc/release_notes/0_2_1.md
80
+ - doc/release_notes/0_0_3.md
81
+ - doc/release_notes/0_16_1.md
82
+ - doc/release_notes/0_17_0.md
83
+ - doc/release_notes/0_0_2.md
84
+ - doc/release_notes/0_16_0.md
85
+ - doc/release_notes/0_3_1.md
86
+ - doc/release_notes/0_15_3.md
87
+ - doc/release_notes/0_14_2.md
88
+ - doc/release_notes/0_2_0.md
88
89
  files:
89
90
  - LICENSE.txt
90
91
  - README.md
@@ -119,6 +120,7 @@ files:
119
120
  - doc/release_notes/0_16_1.md
120
121
  - doc/release_notes/0_17_0.md
121
122
  - doc/release_notes/0_18_0.md
123
+ - doc/release_notes/0_18_1.md
122
124
  - doc/release_notes/0_1_0.md
123
125
  - doc/release_notes/0_2_0.md
124
126
  - doc/release_notes/0_2_1.md
@@ -300,7 +302,8 @@ metadata:
300
302
  documentation_uri: https://honeyryderchuck.gitlab.io/httpx/rdoc/
301
303
  source_code_uri: https://gitlab.com/honeyryderchuck/httpx
302
304
  homepage_uri: https://honeyryderchuck.gitlab.io/httpx/
303
- post_install_message:
305
+ rubygems_mfa_required: 'true'
306
+ post_install_message:
304
307
  rdoc_options: []
305
308
  require_paths:
306
309
  - lib
@@ -315,8 +318,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
315
318
  - !ruby/object:Gem::Version
316
319
  version: '0'
317
320
  requirements: []
318
- rubygems_version: 3.2.22
319
- signing_key:
321
+ rubygems_version: 3.1.6
322
+ signing_key:
320
323
  specification_version: 4
321
324
  summary: HTTPX, to the future, and beyond
322
325
  test_files: []