net-http 0.4.1 → 0.5.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cf933c8a700d19b030c85a6bbd7dc2d9dd5756d50076a13fabbc44284b76af6c
4
- data.tar.gz: 6ed388df8dfe9f603c7a838a274d52940b2494fb35a7fe2eb5514fd0bfbc7e0f
3
+ metadata.gz: c03edd74b23392c1b0f19f66370d554d8f1609fe7353165388f35055d9a24e1c
4
+ data.tar.gz: f5b94529123018fb71d778be8ae2675f16d3f6e49d99a19da9303ad1f23bcea2
5
5
  SHA512:
6
- metadata.gz: cb250a681c61405474f625099b62ff0eaad5334e12ffaca3ce1ad9781bcfc61b289cae035fdbe7850f17255d117b918c2339c6b504b2783899dce64c14fc1291
7
- data.tar.gz: 735ae93466d2c3e019b5c277549751a68708400a7d3ff88a55c1d17d3bfcc6c07d6147023f21cf138812dbca5a1a5b24ed5cd54b3c919a8723f24d88e69b8997
6
+ metadata.gz: f6f7879eb1abda08f6ffbdeec8918af799fbea576008d3ed1902a9c2c9a97b9ede394fdc50dccee513c413a1427e4a37a8db5623d8fdcec0c2e496ad661cf99e
7
+ data.tar.gz: f66425b565071ed067b1786e2553819e92f9243db950d6e57298299df43cb7c957dc7b29e1604cf6f227f43cda8957a3e97c6038d4f52ad678ad13226f9f1c66
@@ -4,10 +4,10 @@ Redistribution and use in source and binary forms, with or without
4
4
  modification, are permitted provided that the following conditions
5
5
  are met:
6
6
  1. Redistributions of source code must retain the above copyright
7
- notice, this list of conditions and the following disclaimer.
7
+ notice, this list of conditions and the following disclaimer.
8
8
  2. Redistributions in binary form must reproduce the above copyright
9
- notice, this list of conditions and the following disclaimer in the
10
- documentation and/or other materials provided with the distribution.
9
+ notice, this list of conditions and the following disclaimer in the
10
+ documentation and/or other materials provided with the distribution.
11
11
 
12
12
  THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
13
13
  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
data/COPYING ADDED
@@ -0,0 +1,56 @@
1
+ Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
2
+ You can redistribute it and/or modify it under either the terms of the
3
+ 2-clause BSDL (see the file BSDL), or the conditions below:
4
+
5
+ 1. You may make and give away verbatim copies of the source form of the
6
+ software without restriction, provided that you duplicate all of the
7
+ original copyright notices and associated disclaimers.
8
+
9
+ 2. You may modify your copy of the software in any way, provided that
10
+ you do at least ONE of the following:
11
+
12
+ a. place your modifications in the Public Domain or otherwise
13
+ make them Freely Available, such as by posting said
14
+ modifications to Usenet or an equivalent medium, or by allowing
15
+ the author to include your modifications in the software.
16
+
17
+ b. use the modified software only within your corporation or
18
+ organization.
19
+
20
+ c. give non-standard binaries non-standard names, with
21
+ instructions on where to get the original software distribution.
22
+
23
+ d. make other distribution arrangements with the author.
24
+
25
+ 3. You may distribute the software in object code or binary form,
26
+ provided that you do at least ONE of the following:
27
+
28
+ a. distribute the binaries and library files of the software,
29
+ together with instructions (in the manual page or equivalent)
30
+ on where to get the original distribution.
31
+
32
+ b. accompany the distribution with the machine-readable source of
33
+ the software.
34
+
35
+ c. give non-standard binaries non-standard names, with
36
+ instructions on where to get the original software distribution.
37
+
38
+ d. make other distribution arrangements with the author.
39
+
40
+ 4. You may modify and include the part of the software into any other
41
+ software (possibly commercial). But some files in the distribution
42
+ are not written by the author, so that they are not under these terms.
43
+
44
+ For the list of those files and their copying conditions, see the
45
+ file LEGAL.
46
+
47
+ 5. The scripts and library files supplied as input to or produced as
48
+ output from the software do not automatically fall under the
49
+ copyright of the software, but belong to whomever generated them,
50
+ and may be sold commercially, and may be aggregated with this
51
+ software.
52
+
53
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
54
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
55
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
56
+ PURPOSE.
data/README.md CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  Net::HTTP provides a rich library which can be used to build HTTP
4
4
  user-agents. For more details about HTTP see
5
- [RFC2616](http://www.ietf.org/rfc/rfc2616.txt).
5
+ [RFC9110 HTTP Semantics](https://www.ietf.org/rfc/rfc9110.html) and
6
+ [RFC9112 HTTP/1.1](https://www.ietf.org/rfc/rfc9112.html).
6
7
 
7
8
  Net::HTTP is designed to work closely with URI. URI::HTTP#host,
8
9
  URI::HTTP#port and URI::HTTP#request_uri are designed to work with
@@ -491,7 +491,7 @@ module Net::HTTPHeader
491
491
  alias canonical_each each_capitalized
492
492
 
493
493
  def capitalize(name)
494
- name.to_s.split(/-/).map {|s| s.capitalize }.join('-')
494
+ name.to_s.split('-'.freeze).map {|s| s.capitalize }.join('-'.freeze)
495
495
  end
496
496
  private :capitalize
497
497
 
@@ -124,6 +124,11 @@ end
124
124
  # - {Idempotent}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods]: yes.
125
125
  # - {Cacheable}[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cacheable_methods]: no.
126
126
  #
127
+ # Related:
128
+ #
129
+ # - Net::HTTP.put: sends +PUT+ request, returns response object.
130
+ # - Net::HTTP#put: sends +PUT+ request, returns response object.
131
+ #
127
132
  class Net::HTTP::Put < Net::HTTPRequest
128
133
  METHOD = 'PUT'
129
134
  REQUEST_HAS_BODY = true
data/lib/net/http.rb CHANGED
@@ -67,6 +67,8 @@ module Net #:nodoc:
67
67
  # Net::HTTP.post(uri, data)
68
68
  # params = {title: 'foo', body: 'bar', userId: 1}
69
69
  # Net::HTTP.post_form(uri, params)
70
+ # data = '{"title": "foo", "body": "bar", "userId": 1}'
71
+ # Net::HTTP.put(uri, data)
70
72
  #
71
73
  # - If performance is important, consider using sessions, which lower request overhead.
72
74
  # This {session}[rdoc-ref:Net::HTTP@Sessions] has multiple requests for
@@ -456,6 +458,10 @@ module Net #:nodoc:
456
458
  #
457
459
  # == What's Here
458
460
  #
461
+ # First, what's elsewhere. Class Net::HTTP:
462
+ #
463
+ # - Inherits from {class Object}[https://docs.ruby-lang.org/en/master/Object.html#class-Object-label-What-27s+Here].
464
+ #
459
465
  # This is a categorized summary of methods and attributes.
460
466
  #
461
467
  # === \Net::HTTP Objects
@@ -520,6 +526,8 @@ module Net #:nodoc:
520
526
  # Sends a POST request with form data and returns a response object.
521
527
  # - {::post}[rdoc-ref:Net::HTTP.post]:
522
528
  # Sends a POST request with data and returns a response object.
529
+ # - {::put}[rdoc-ref:Net::HTTP.put]:
530
+ # Sends a PUT request with data and returns a response object.
523
531
  # - {#copy}[rdoc-ref:Net::HTTP#copy]:
524
532
  # Sends a COPY request and returns a response object.
525
533
  # - {#delete}[rdoc-ref:Net::HTTP#delete]:
@@ -722,7 +730,7 @@ module Net #:nodoc:
722
730
  class HTTP < Protocol
723
731
 
724
732
  # :stopdoc:
725
- VERSION = "0.4.1"
733
+ VERSION = "0.5.0"
726
734
  HTTPVersion = '1.1'
727
735
  begin
728
736
  require 'zlib'
@@ -889,6 +897,39 @@ module Net #:nodoc:
889
897
  }
890
898
  end
891
899
 
900
+ # Sends a PUT request to the server; returns a Net::HTTPResponse object.
901
+ #
902
+ # Argument +url+ must be a URL;
903
+ # argument +data+ must be a string:
904
+ #
905
+ # _uri = uri.dup
906
+ # _uri.path = '/posts'
907
+ # data = '{"title": "foo", "body": "bar", "userId": 1}'
908
+ # headers = {'content-type': 'application/json'}
909
+ # res = Net::HTTP.put(_uri, data, headers) # => #<Net::HTTPCreated 201 Created readbody=true>
910
+ # puts res.body
911
+ #
912
+ # Output:
913
+ #
914
+ # {
915
+ # "title": "foo",
916
+ # "body": "bar",
917
+ # "userId": 1,
918
+ # "id": 101
919
+ # }
920
+ #
921
+ # Related:
922
+ #
923
+ # - Net::HTTP::Put: request class for \HTTP method +PUT+.
924
+ # - Net::HTTP#put: convenience method for \HTTP method +PUT+.
925
+ #
926
+ def HTTP.put(url, data, header = nil)
927
+ start(url.hostname, url.port,
928
+ :use_ssl => url.scheme == 'https' ) {|http|
929
+ http.put(url, data, header)
930
+ }
931
+ end
932
+
892
933
  #
893
934
  # \HTTP session management
894
935
  #
@@ -1062,7 +1103,7 @@ module Net #:nodoc:
1062
1103
  # For proxy-defining arguments +p_addr+ through +p_no_proxy+,
1063
1104
  # see {Proxy Server}[rdoc-ref:Net::HTTP@Proxy+Server].
1064
1105
  #
1065
- def HTTP.new(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_no_proxy = nil)
1106
+ def HTTP.new(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_no_proxy = nil, p_use_ssl = nil)
1066
1107
  http = super address, port
1067
1108
 
1068
1109
  if proxy_class? then # from Net::HTTP::Proxy()
@@ -1071,6 +1112,7 @@ module Net #:nodoc:
1071
1112
  http.proxy_port = @proxy_port
1072
1113
  http.proxy_user = @proxy_user
1073
1114
  http.proxy_pass = @proxy_pass
1115
+ http.proxy_use_ssl = @proxy_use_ssl
1074
1116
  elsif p_addr == :ENV then
1075
1117
  http.proxy_from_env = true
1076
1118
  else
@@ -1082,34 +1124,67 @@ module Net #:nodoc:
1082
1124
  http.proxy_port = p_port || default_port
1083
1125
  http.proxy_user = p_user
1084
1126
  http.proxy_pass = p_pass
1127
+ http.proxy_use_ssl = p_use_ssl
1085
1128
  end
1086
1129
 
1087
1130
  http
1088
1131
  end
1089
1132
 
1133
+ class << HTTP
1134
+ # Allows to set the default configuration that will be used
1135
+ # when creating a new connection.
1136
+ #
1137
+ # Example:
1138
+ #
1139
+ # Net::HTTP.default_configuration = {
1140
+ # read_timeout: 1,
1141
+ # write_timeout: 1
1142
+ # }
1143
+ # http = Net::HTTP.new(hostname)
1144
+ # http.open_timeout # => 60
1145
+ # http.read_timeout # => 1
1146
+ # http.write_timeout # => 1
1147
+ #
1148
+ attr_accessor :default_configuration
1149
+ end
1150
+
1090
1151
  # Creates a new \Net::HTTP object for the specified server address,
1091
1152
  # without opening the TCP connection or initializing the \HTTP session.
1092
1153
  # The +address+ should be a DNS hostname or IP address.
1093
1154
  def initialize(address, port = nil) # :nodoc:
1155
+ defaults = {
1156
+ keep_alive_timeout: 2,
1157
+ close_on_empty_response: false,
1158
+ open_timeout: 60,
1159
+ read_timeout: 60,
1160
+ write_timeout: 60,
1161
+ continue_timeout: nil,
1162
+ max_retries: 1,
1163
+ debug_output: nil,
1164
+ response_body_encoding: false,
1165
+ ignore_eof: true
1166
+ }
1167
+ options = defaults.merge(self.class.default_configuration || {})
1168
+
1094
1169
  @address = address
1095
1170
  @port = (port || HTTP.default_port)
1096
1171
  @ipaddr = nil
1097
1172
  @local_host = nil
1098
1173
  @local_port = nil
1099
1174
  @curr_http_version = HTTPVersion
1100
- @keep_alive_timeout = 2
1175
+ @keep_alive_timeout = options[:keep_alive_timeout]
1101
1176
  @last_communicated = nil
1102
- @close_on_empty_response = false
1177
+ @close_on_empty_response = options[:close_on_empty_response]
1103
1178
  @socket = nil
1104
1179
  @started = false
1105
- @open_timeout = 60
1106
- @read_timeout = 60
1107
- @write_timeout = 60
1108
- @continue_timeout = nil
1109
- @max_retries = 1
1110
- @debug_output = nil
1111
- @response_body_encoding = false
1112
- @ignore_eof = true
1180
+ @open_timeout = options[:open_timeout]
1181
+ @read_timeout = options[:read_timeout]
1182
+ @write_timeout = options[:write_timeout]
1183
+ @continue_timeout = options[:continue_timeout]
1184
+ @max_retries = options[:max_retries]
1185
+ @debug_output = options[:debug_output]
1186
+ @response_body_encoding = options[:response_body_encoding]
1187
+ @ignore_eof = options[:ignore_eof]
1113
1188
 
1114
1189
  @proxy_from_env = false
1115
1190
  @proxy_uri = nil
@@ -1117,6 +1192,7 @@ module Net #:nodoc:
1117
1192
  @proxy_port = nil
1118
1193
  @proxy_user = nil
1119
1194
  @proxy_pass = nil
1195
+ @proxy_use_ssl = nil
1120
1196
 
1121
1197
  @use_ssl = false
1122
1198
  @ssl_context = nil
@@ -1251,6 +1327,7 @@ module Net #:nodoc:
1251
1327
  # Sets the proxy password;
1252
1328
  # see {Proxy Server}[rdoc-ref:Net::HTTP@Proxy+Server].
1253
1329
  attr_writer :proxy_pass
1330
+ attr_writer :proxy_use_ssl
1254
1331
 
1255
1332
  # Returns the IP address for the connection.
1256
1333
  #
@@ -1440,23 +1517,6 @@ module Net #:nodoc:
1440
1517
  @use_ssl = flag
1441
1518
  end
1442
1519
 
1443
- SSL_IVNAMES = [
1444
- :@ca_file,
1445
- :@ca_path,
1446
- :@cert,
1447
- :@cert_store,
1448
- :@ciphers,
1449
- :@extra_chain_cert,
1450
- :@key,
1451
- :@ssl_timeout,
1452
- :@ssl_version,
1453
- :@min_version,
1454
- :@max_version,
1455
- :@verify_callback,
1456
- :@verify_depth,
1457
- :@verify_mode,
1458
- :@verify_hostname,
1459
- ] # :nodoc:
1460
1520
  SSL_ATTRIBUTES = [
1461
1521
  :ca_file,
1462
1522
  :ca_path,
@@ -1475,6 +1535,8 @@ module Net #:nodoc:
1475
1535
  :verify_hostname,
1476
1536
  ] # :nodoc:
1477
1537
 
1538
+ SSL_IVNAMES = SSL_ATTRIBUTES.map { |a| "@#{a}".to_sym } # :nodoc:
1539
+
1478
1540
  # Sets or returns the path to a CA certification file in PEM format.
1479
1541
  attr_accessor :ca_file
1480
1542
 
@@ -1610,7 +1672,13 @@ module Net #:nodoc:
1610
1672
  debug "opened"
1611
1673
  if use_ssl?
1612
1674
  if proxy?
1613
- plain_sock = BufferedIO.new(s, read_timeout: @read_timeout,
1675
+ if @proxy_use_ssl
1676
+ proxy_sock = OpenSSL::SSL::SSLSocket.new(s)
1677
+ ssl_socket_connect(proxy_sock, @open_timeout)
1678
+ else
1679
+ proxy_sock = s
1680
+ end
1681
+ proxy_sock = BufferedIO.new(proxy_sock, read_timeout: @read_timeout,
1614
1682
  write_timeout: @write_timeout,
1615
1683
  continue_timeout: @continue_timeout,
1616
1684
  debug_output: @debug_output)
@@ -1621,8 +1689,8 @@ module Net #:nodoc:
1621
1689
  buf << "Proxy-Authorization: Basic #{credential}\r\n"
1622
1690
  end
1623
1691
  buf << "\r\n"
1624
- plain_sock.write(buf)
1625
- HTTPResponse.read_new(plain_sock).value
1692
+ proxy_sock.write(buf)
1693
+ HTTPResponse.read_new(proxy_sock).value
1626
1694
  # assuming nothing left in buffers after successful CONNECT response
1627
1695
  end
1628
1696
 
@@ -1730,13 +1798,14 @@ module Net #:nodoc:
1730
1798
  @proxy_port = nil
1731
1799
  @proxy_user = nil
1732
1800
  @proxy_pass = nil
1801
+ @proxy_use_ssl = nil
1733
1802
 
1734
1803
  # Creates an \HTTP proxy class which behaves like \Net::HTTP, but
1735
1804
  # performs all access via the specified proxy.
1736
1805
  #
1737
1806
  # This class is obsolete. You may pass these same parameters directly to
1738
1807
  # \Net::HTTP.new. See Net::HTTP.new for details of the arguments.
1739
- def HTTP.Proxy(p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil) #:nodoc:
1808
+ def HTTP.Proxy(p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_use_ssl = nil) #:nodoc:
1740
1809
  return self unless p_addr
1741
1810
 
1742
1811
  Class.new(self) {
@@ -1754,6 +1823,7 @@ module Net #:nodoc:
1754
1823
 
1755
1824
  @proxy_user = p_user
1756
1825
  @proxy_pass = p_pass
1826
+ @proxy_use_ssl = p_use_ssl
1757
1827
  }
1758
1828
  end
1759
1829
 
@@ -1778,6 +1848,9 @@ module Net #:nodoc:
1778
1848
  # Returns the password for accessing the proxy, or +nil+ if none;
1779
1849
  # see Net::HTTP@Proxy+Server.
1780
1850
  attr_reader :proxy_pass
1851
+
1852
+ # Use SSL when talking to the proxy. If Net::HTTP does not use a proxy, nil.
1853
+ attr_reader :proxy_use_ssl
1781
1854
  end
1782
1855
 
1783
1856
  # Returns +true+ if a proxy server is defined, +false+ otherwise;
@@ -2012,6 +2085,11 @@ module Net #:nodoc:
2012
2085
  # http = Net::HTTP.new(hostname)
2013
2086
  # http.put('/todos/1', data) # => #<Net::HTTPOK 200 OK readbody=true>
2014
2087
  #
2088
+ # Related:
2089
+ #
2090
+ # - Net::HTTP::Put: request class for \HTTP method PUT.
2091
+ # - Net::HTTP.put: sends PUT request, returns response body.
2092
+ #
2015
2093
  def put(path, data, initheader = nil)
2016
2094
  request(Put.new(path, initheader), data)
2017
2095
  end
@@ -2350,7 +2428,10 @@ module Net #:nodoc:
2350
2428
  res
2351
2429
  }
2352
2430
  res.reading_body(@socket, req.response_body_permitted?) {
2353
- yield res if block_given?
2431
+ if block_given?
2432
+ count = max_retries # Don't restart in the middle of a download
2433
+ yield res
2434
+ end
2354
2435
  }
2355
2436
  rescue Net::OpenTimeout
2356
2437
  raise
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-http
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - NARUSE, Yui
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-05 00:00:00.000000000 Z
11
+ date: 2024-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: uri
@@ -31,8 +31,9 @@ executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
+ - BSDL
35
+ - COPYING
34
36
  - Gemfile
35
- - LICENSE.txt
36
37
  - README.md
37
38
  - Rakefile
38
39
  - bin/console
@@ -59,7 +60,7 @@ licenses:
59
60
  metadata:
60
61
  homepage_uri: https://github.com/ruby/net-http
61
62
  source_code_uri: https://github.com/ruby/net-http
62
- post_install_message:
63
+ post_install_message:
63
64
  rdoc_options: []
64
65
  require_paths:
65
66
  - lib
@@ -74,8 +75,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
75
  - !ruby/object:Gem::Version
75
76
  version: '0'
76
77
  requirements: []
77
- rubygems_version: 3.6.0.dev
78
- signing_key:
78
+ rubygems_version: 3.5.11
79
+ signing_key:
79
80
  specification_version: 4
80
81
  summary: HTTP client api for Ruby.
81
82
  test_files: []