net-http 0.3.1 → 0.3.2
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/lib/net/http/header.rb +118 -59
- data/lib/net/http/responses.rb +479 -69
- data/lib/net/http.rb +312 -75
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2201663415fa5809c53f6c1d8a06524739bcee246443e22175aa89cda45c92c
|
4
|
+
data.tar.gz: 971f571f8d9966a09baf43a5117d9f072ae78b890e6cc4991a958081728671c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '086e4def849a69d4ecad94e1a13fe35eee82453f8748be247ea2c133b40ae7d3b419a0f71fa9dcd7efe783d0b725a13d527e287da1ccc406f7daa5700f2ec8e5'
|
7
|
+
data.tar.gz: 47a0f2d46fe8a9bc328241fb0fc90ea1c4285b0e46460998e40650a930bd96743051911e62b790d4502b39a007a5a04e260affe42d584bb73442ab414b51f1e3
|
data/lib/net/http/header.rb
CHANGED
@@ -207,9 +207,7 @@ module Net::HTTPHeader
|
|
207
207
|
# or +nil+ if there is no such key;
|
208
208
|
# see {Fields}[rdoc-ref:Net::HTTPHeader@Fields]:
|
209
209
|
#
|
210
|
-
# res = Net::HTTP.
|
211
|
-
# http.get('/todos/1')
|
212
|
-
# end
|
210
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
213
211
|
# res['Connection'] # => "keep-alive"
|
214
212
|
# res['Nosuch'] # => nil
|
215
213
|
#
|
@@ -293,9 +291,7 @@ module Net::HTTPHeader
|
|
293
291
|
# or +nil+ if there is no such field;
|
294
292
|
# see {Fields}[rdoc-ref:Net::HTTPHeader@Fields]:
|
295
293
|
#
|
296
|
-
# res = Net::HTTP.
|
297
|
-
# http.get('/todos/1')
|
298
|
-
# end
|
294
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
299
295
|
# res.get_fields('Connection') # => ["keep-alive"]
|
300
296
|
# res.get_fields('Nosuch') # => nil
|
301
297
|
#
|
@@ -305,7 +301,7 @@ module Net::HTTPHeader
|
|
305
301
|
@header[stringified_downcased_key].dup
|
306
302
|
end
|
307
303
|
|
308
|
-
#
|
304
|
+
# call-seq:
|
309
305
|
# fetch(key, default_val = nil) {|key| ... } -> object
|
310
306
|
# fetch(key, default_val = nil) -> value or default_val
|
311
307
|
#
|
@@ -314,9 +310,7 @@ module Net::HTTPHeader
|
|
314
310
|
# ignores the +default_val+;
|
315
311
|
# see {Fields}[rdoc-ref:Net::HTTPHeader@Fields]:
|
316
312
|
#
|
317
|
-
# res = Net::HTTP.
|
318
|
-
# http.get('/todos/1')
|
319
|
-
# end
|
313
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
320
314
|
#
|
321
315
|
# # Field exists; block not called.
|
322
316
|
# res.fetch('Connection') do |value|
|
@@ -343,9 +337,7 @@ module Net::HTTPHeader
|
|
343
337
|
|
344
338
|
# Calls the block with each key/value pair:
|
345
339
|
#
|
346
|
-
# res = Net::HTTP.
|
347
|
-
# http.get('/todos/1')
|
348
|
-
# end
|
340
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
349
341
|
# res.each_header do |key, value|
|
350
342
|
# p [key, value] if key.start_with?('c')
|
351
343
|
# end
|
@@ -372,20 +364,18 @@ module Net::HTTPHeader
|
|
372
364
|
|
373
365
|
# Calls the block with each field key:
|
374
366
|
#
|
375
|
-
# res = Net::HTTP.
|
376
|
-
# http.get('/todos/1')
|
377
|
-
# end
|
367
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
378
368
|
# res.each_key do |key|
|
379
369
|
# p key if key.start_with?('c')
|
380
370
|
# end
|
381
371
|
#
|
382
372
|
# Output:
|
383
373
|
#
|
384
|
-
#
|
385
|
-
#
|
386
|
-
#
|
387
|
-
#
|
388
|
-
#
|
374
|
+
# "content-type"
|
375
|
+
# "connection"
|
376
|
+
# "cache-control"
|
377
|
+
# "cf-cache-status"
|
378
|
+
# "cf-ray"
|
389
379
|
#
|
390
380
|
# Returns an enumerator if no block is given.
|
391
381
|
#
|
@@ -399,9 +389,7 @@ module Net::HTTPHeader
|
|
399
389
|
|
400
390
|
# Calls the block with each capitalized field name:
|
401
391
|
#
|
402
|
-
# res = Net::HTTP.
|
403
|
-
# http.get('/todos/1')
|
404
|
-
# end
|
392
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
405
393
|
# res.each_capitalized_name do |key|
|
406
394
|
# p key if key.start_with?('C')
|
407
395
|
# end
|
@@ -427,9 +415,7 @@ module Net::HTTPHeader
|
|
427
415
|
|
428
416
|
# Calls the block with each string field value:
|
429
417
|
#
|
430
|
-
# res = Net::HTTP.
|
431
|
-
# http.get('/todos/1')
|
432
|
-
# end
|
418
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
433
419
|
# res.each_value do |value|
|
434
420
|
# p value if value.start_with?('c')
|
435
421
|
# end
|
@@ -554,7 +540,7 @@ module Net::HTTPHeader
|
|
554
540
|
result
|
555
541
|
end
|
556
542
|
|
557
|
-
#
|
543
|
+
# call-seq:
|
558
544
|
# set_range(length) -> length
|
559
545
|
# set_range(offset, length) -> range
|
560
546
|
# set_range(begin..length) -> range
|
@@ -610,8 +596,15 @@ module Net::HTTPHeader
|
|
610
596
|
|
611
597
|
alias range= set_range
|
612
598
|
|
613
|
-
# Returns
|
614
|
-
#
|
599
|
+
# Returns the value of field <tt>'Content-Length'</tt> as an integer,
|
600
|
+
# or +nil+ if there is no such field;
|
601
|
+
# see {Content-Length request header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-length-request-header]:
|
602
|
+
#
|
603
|
+
# res = Net::HTTP.get_response(hostname, '/nosuch/1')
|
604
|
+
# res.content_length # => 2
|
605
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
606
|
+
# res.content_length # => nil
|
607
|
+
#
|
615
608
|
def content_length
|
616
609
|
return nil unless key?('Content-Length')
|
617
610
|
len = self['Content-Length'].slice(/\d+/) or
|
@@ -619,6 +612,20 @@ module Net::HTTPHeader
|
|
619
612
|
len.to_i
|
620
613
|
end
|
621
614
|
|
615
|
+
# Sets the value of field <tt>'Content-Length'</tt> to the given numeric;
|
616
|
+
# see {Content-Length response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-length-response-header]:
|
617
|
+
#
|
618
|
+
# _uri = uri.dup
|
619
|
+
# hostname = _uri.hostname # => "jsonplaceholder.typicode.com"
|
620
|
+
# _uri.path = '/posts' # => "/posts"
|
621
|
+
# req = Net::HTTP::Post.new(_uri) # => #<Net::HTTP::Post POST>
|
622
|
+
# req.body = '{"title": "foo","body": "bar","userId": 1}'
|
623
|
+
# req.content_length = req.body.size # => 42
|
624
|
+
# req.content_type = 'application/json'
|
625
|
+
# res = Net::HTTP.start(hostname) do |http|
|
626
|
+
# http.request(req)
|
627
|
+
# end # => #<Net::HTTPCreated 201 Created readbody=true>
|
628
|
+
#
|
622
629
|
def content_length=(len)
|
623
630
|
unless len
|
624
631
|
@header.delete 'content-length'
|
@@ -627,20 +634,31 @@ module Net::HTTPHeader
|
|
627
634
|
@header['content-length'] = [len.to_i.to_s]
|
628
635
|
end
|
629
636
|
|
630
|
-
# Returns
|
631
|
-
#
|
632
|
-
#
|
633
|
-
#
|
637
|
+
# Returns +true+ if field <tt>'Transfer-Encoding'</tt>
|
638
|
+
# exists and has value <tt>'chunked'</tt>,
|
639
|
+
# +false+ otherwise;
|
640
|
+
# see {Transfer-Encoding response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#transfer-encoding-response-header]:
|
641
|
+
#
|
642
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
643
|
+
# res['Transfer-Encoding'] # => "chunked"
|
644
|
+
# res.chunked? # => true
|
645
|
+
#
|
634
646
|
def chunked?
|
635
647
|
return false unless @header['transfer-encoding']
|
636
648
|
field = self['Transfer-Encoding']
|
637
649
|
(/(?:\A|[^\-\w])chunked(?![\-\w])/i =~ field) ? true : false
|
638
650
|
end
|
639
651
|
|
640
|
-
# Returns a Range object
|
641
|
-
#
|
642
|
-
#
|
643
|
-
#
|
652
|
+
# Returns a Range object representing the value of field
|
653
|
+
# <tt>'Content-Range'</tt>, or +nil+ if no such field exists;
|
654
|
+
# see {Content-Range response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-range-response-header]:
|
655
|
+
#
|
656
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
657
|
+
# res['Content-Range'] # => nil
|
658
|
+
# res['Content-Range'] = 'bytes 0-499/1000'
|
659
|
+
# res['Content-Range'] # => "bytes 0-499/1000"
|
660
|
+
# res.content_range # => 0..499
|
661
|
+
#
|
644
662
|
def content_range
|
645
663
|
return nil unless @header['content-range']
|
646
664
|
m = %r<\A\s*(\w+)\s+(\d+)-(\d+)/(\d+|\*)>.match(self['Content-Range']) or
|
@@ -649,14 +667,29 @@ module Net::HTTPHeader
|
|
649
667
|
m[2].to_i .. m[3].to_i
|
650
668
|
end
|
651
669
|
|
652
|
-
#
|
670
|
+
# Returns the integer representing length of the value of field
|
671
|
+
# <tt>'Content-Range'</tt>, or +nil+ if no such field exists;
|
672
|
+
# see {Content-Range response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-range-response-header]:
|
673
|
+
#
|
674
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
675
|
+
# res['Content-Range'] # => nil
|
676
|
+
# res['Content-Range'] = 'bytes 0-499/1000'
|
677
|
+
# res.range_length # => 500
|
678
|
+
#
|
653
679
|
def range_length
|
654
680
|
r = content_range() or return nil
|
655
681
|
r.end - r.begin + 1
|
656
682
|
end
|
657
683
|
|
658
|
-
# Returns
|
659
|
-
#
|
684
|
+
# Returns the {media type}[https://en.wikipedia.org/wiki/Media_type]
|
685
|
+
# from the value of field <tt>'Content-Type'</tt>,
|
686
|
+
# or +nil+ if no such field exists;
|
687
|
+
# see {Content-Type response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-response-header]:
|
688
|
+
#
|
689
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
690
|
+
# res['content-type'] # => "application/json; charset=utf-8"
|
691
|
+
# res.content_type # => "application/json"
|
692
|
+
#
|
660
693
|
def content_type
|
661
694
|
return nil unless main_type()
|
662
695
|
if sub_type()
|
@@ -665,16 +698,31 @@ module Net::HTTPHeader
|
|
665
698
|
end
|
666
699
|
end
|
667
700
|
|
668
|
-
# Returns
|
669
|
-
#
|
701
|
+
# Returns the leading ('type') part of the
|
702
|
+
# {media type}[https://en.wikipedia.org/wiki/Media_type]
|
703
|
+
# from the value of field <tt>'Content-Type'</tt>,
|
704
|
+
# or +nil+ if no such field exists;
|
705
|
+
# see {Content-Type response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-response-header]:
|
706
|
+
#
|
707
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
708
|
+
# res['content-type'] # => "application/json; charset=utf-8"
|
709
|
+
# res.main_type # => "application"
|
710
|
+
#
|
670
711
|
def main_type
|
671
712
|
return nil unless @header['content-type']
|
672
713
|
self['Content-Type'].split(';').first.to_s.split('/')[0].to_s.strip
|
673
714
|
end
|
674
715
|
|
675
|
-
# Returns
|
676
|
-
#
|
677
|
-
#
|
716
|
+
# Returns the trailing ('subtype') part of the
|
717
|
+
# {media type}[https://en.wikipedia.org/wiki/Media_type]
|
718
|
+
# from the value of field <tt>'Content-Type'</tt>,
|
719
|
+
# or +nil+ if no such field exists;
|
720
|
+
# see {Content-Type response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-response-header]:
|
721
|
+
#
|
722
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
723
|
+
# res['content-type'] # => "application/json; charset=utf-8"
|
724
|
+
# res.sub_type # => "json"
|
725
|
+
#
|
678
726
|
def sub_type
|
679
727
|
return nil unless @header['content-type']
|
680
728
|
_, sub = *self['Content-Type'].split(';').first.to_s.split('/')
|
@@ -682,9 +730,14 @@ module Net::HTTPHeader
|
|
682
730
|
sub.strip
|
683
731
|
end
|
684
732
|
|
685
|
-
#
|
686
|
-
#
|
687
|
-
#
|
733
|
+
# Returns the trailing ('parameters') part of the value of field <tt>'Content-Type'</tt>,
|
734
|
+
# or +nil+ if no such field exists;
|
735
|
+
# see {Content-Type response header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-response-header]:
|
736
|
+
#
|
737
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
738
|
+
# res['content-type'] # => "application/json; charset=utf-8"
|
739
|
+
# res.type_params # => {"charset"=>"utf-8"}
|
740
|
+
#
|
688
741
|
def type_params
|
689
742
|
result = {}
|
690
743
|
list = self['Content-Type'].to_s.split(';')
|
@@ -696,10 +749,12 @@ module Net::HTTPHeader
|
|
696
749
|
result
|
697
750
|
end
|
698
751
|
|
699
|
-
# Sets the
|
700
|
-
#
|
701
|
-
#
|
702
|
-
#
|
752
|
+
# Sets the value of field <tt>'Content-Type'</tt>;
|
753
|
+
# returns the new value;
|
754
|
+
# see {Content-Type request header}[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-request-header]:
|
755
|
+
#
|
756
|
+
# req = Net::HTTP::Get.new(uri)
|
757
|
+
# req.set_content_type('application/json') # => ["application/json"]
|
703
758
|
#
|
704
759
|
# Net::HTTPHeader#content_type= is an alias for Net::HTTPHeader#set_content_type.
|
705
760
|
def set_content_type(type, params = {})
|
@@ -717,6 +772,7 @@ module Net::HTTPHeader
|
|
717
772
|
# application/x-www-form-urlencoded
|
718
773
|
#
|
719
774
|
# Example:
|
775
|
+
#
|
720
776
|
# http.form_data = {"q" => "ruby", "lang" => "en"}
|
721
777
|
# http.form_data = {"q" => ["ruby", "perl"], "lang" => "en"}
|
722
778
|
# http.set_form_data({"q" => "ruby", "lang" => "en"}, ';')
|
@@ -746,12 +802,14 @@ module Net::HTTPHeader
|
|
746
802
|
#
|
747
803
|
# Each item of params should respond to +each+ and yield 2-3 arguments,
|
748
804
|
# or an array of 2-3 elements. The arguments yielded should be:
|
749
|
-
#
|
750
|
-
#
|
751
|
-
#
|
752
|
-
#
|
753
|
-
#
|
754
|
-
#
|
805
|
+
#
|
806
|
+
# - The name of the field.
|
807
|
+
# - The value of the field, it should be a String or a File or IO-like.
|
808
|
+
# - An options hash, supporting the following options
|
809
|
+
# (used only for file uploads); entries:
|
810
|
+
#
|
811
|
+
# - +:filename+: The name of the file to use.
|
812
|
+
# - +:content_type+: The content type of the uploaded file.
|
755
813
|
#
|
756
814
|
# Each item is a file field or a normal field.
|
757
815
|
# If +value+ is a File object or the +opt+ hash has a :filename key,
|
@@ -763,6 +821,7 @@ module Net::HTTPHeader
|
|
763
821
|
# chunked encoding.
|
764
822
|
#
|
765
823
|
# Example:
|
824
|
+
#
|
766
825
|
# req.set_form([["q", "ruby"], ["lang", "en"]])
|
767
826
|
#
|
768
827
|
# req.set_form({"f"=>File.open('/path/to/filename')},
|