http2 0.0.22 → 0.0.23
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.
- data/VERSION +1 -1
- data/http2.gemspec +2 -2
- data/include/errors.rb +5 -11
- data/lib/http2.rb +19 -12
- data/spec/http2_spec.rb +39 -7
- metadata +16 -16
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.0. | 
| 1 | 
            +
            0.0.23
         | 
    
        data/http2.gemspec
    CHANGED
    
    | @@ -5,11 +5,11 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = "http2"
         | 
| 8 | 
            -
              s.version = "0.0. | 
| 8 | 
            +
              s.version = "0.0.23"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["Kasper Johansen"]
         | 
| 12 | 
            -
              s.date = "2013- | 
| 12 | 
            +
              s.date = "2013-11-15"
         | 
| 13 13 | 
             
              s.description = "A lightweight framework for doing http-connections in Ruby. Supports cookies, keep-alive, compressing and much more."
         | 
| 14 14 | 
             
              s.email = "k@spernj.org"
         | 
| 15 15 | 
             
              s.extra_rdoc_files = [
         | 
    
        data/include/errors.rb
    CHANGED
    
    | @@ -1,17 +1,11 @@ | |
| 1 1 | 
             
            #This class holds various classes for error-handeling.
         | 
| 2 2 | 
             
            class Http2::Errors
         | 
| 3 | 
            -
               | 
| 4 | 
            -
              class Noaccess < RuntimeError
         | 
| 3 | 
            +
              class Http2error < RuntimeError
         | 
| 5 4 | 
             
                attr_accessor :response
         | 
| 6 5 | 
             
              end
         | 
| 7 6 |  | 
| 8 | 
            -
               | 
| 9 | 
            -
              class Internalserver <  | 
| 10 | 
            -
             | 
| 11 | 
            -
              end
         | 
| 12 | 
            -
              
         | 
| 13 | 
            -
              #Raised when a page is not found.
         | 
| 14 | 
            -
              class Notfound < RuntimeError
         | 
| 15 | 
            -
                attr_accessor :response
         | 
| 16 | 
            -
              end
         | 
| 7 | 
            +
              class Noaccess < Http2error; end
         | 
| 8 | 
            +
              class Internalserver < Http2error; end
         | 
| 9 | 
            +
              class Notfound < Http2error; end
         | 
| 10 | 
            +
              class Badrequest < Http2error; end
         | 
| 17 11 | 
             
            end
         | 
    
        data/lib/http2.rb
    CHANGED
    
    | @@ -286,8 +286,6 @@ class Http2 | |
| 286 286 |  | 
| 287 287 | 
             
                if !@args.key?(:encoding_gzip) or @args[:encoding_gzip]
         | 
| 288 288 | 
             
                  headers["Accept-Encoding"] = "gzip"
         | 
| 289 | 
            -
                else
         | 
| 290 | 
            -
                  #headers["Accept-Encoding"] = "none"
         | 
| 291 289 | 
             
                end
         | 
| 292 290 |  | 
| 293 291 | 
             
                if @args[:basic_auth]
         | 
| @@ -350,7 +348,7 @@ class Http2 | |
| 350 348 | 
             
                return praw
         | 
| 351 349 | 
             
              end
         | 
| 352 350 |  | 
| 353 | 
            -
              VALID_ARGUMENTS_POST = [:post, :url, :default_headers, :headers, :json, :method, :cookies, :on_content]
         | 
| 351 | 
            +
              VALID_ARGUMENTS_POST = [:post, :url, :default_headers, :headers, :json, :method, :cookies, :on_content, :content_type]
         | 
| 354 352 | 
             
              #Posts to a certain page.
         | 
| 355 353 | 
             
              #===Examples
         | 
| 356 354 | 
             
              # res = http.post("login.php", {"username" => "John Doe", "password" => 123)
         | 
| @@ -360,7 +358,6 @@ class Http2 | |
| 360 358 | 
             
                end
         | 
| 361 359 |  | 
| 362 360 | 
             
                args = self.parse_args(args)
         | 
| 363 | 
            -
                content_type = "application/x-www-form-urlencoded"
         | 
| 364 361 |  | 
| 365 362 | 
             
                if args.key?(:method) && args[:method]
         | 
| 366 363 | 
             
                  method = args[:method].to_s.upcase
         | 
| @@ -370,7 +367,7 @@ class Http2 | |
| 370 367 |  | 
| 371 368 | 
             
                if args[:json]
         | 
| 372 369 | 
             
                  require "json" unless ::Kernel.const_defined?(:JSON)
         | 
| 373 | 
            -
                  praw =  | 
| 370 | 
            +
                  praw = args[:json].to_json
         | 
| 374 371 | 
             
                  content_type = "application/json"
         | 
| 375 372 | 
             
                elsif args[:post].is_a?(String)
         | 
| 376 373 | 
             
                  praw = args[:post]
         | 
| @@ -379,15 +376,16 @@ class Http2 | |
| 379 376 | 
             
                  autostate_set_on_post_hash(phash) if @args[:autostate]
         | 
| 380 377 | 
             
                  praw = Http2.post_convert_data(phash)
         | 
| 381 378 | 
             
                end
         | 
| 379 | 
            +
             | 
| 380 | 
            +
                content_type = args[:content_type] || content_type || "application/x-www-form-urlencoded"
         | 
| 382 381 |  | 
| 383 382 | 
             
                @mutex.synchronize do
         | 
| 384 | 
            -
                  puts "Doing post." if @debug
         | 
| 383 | 
            +
                  puts "Http2: Doing post." if @debug
         | 
| 385 384 |  | 
| 386 385 | 
             
                  header_str = "#{method} /#{args[:url]} HTTP/1.1#{@nl}"
         | 
| 387 386 | 
             
                  header_str << self.header_str({"Content-Length" => praw.bytesize, "Content-Type" => content_type}.merge(self.default_headers(args)), args)
         | 
| 388 387 | 
             
                  header_str << @nl
         | 
| 389 388 | 
             
                  header_str << praw
         | 
| 390 | 
            -
                  header_str << @nl
         | 
| 391 389 |  | 
| 392 390 | 
             
                  puts "Http2: Header str: #{header_str}" if @debug
         | 
| 393 391 |  | 
| @@ -509,10 +507,15 @@ class Http2 | |
| 509 507 | 
             
                    first = false if first
         | 
| 510 508 |  | 
| 511 509 | 
             
                    if cookie_data.is_a?(Hash)
         | 
| 512 | 
            -
                       | 
| 510 | 
            +
                      name = cookie_data["name"]
         | 
| 511 | 
            +
                      value = cookie_data["value"]
         | 
| 513 512 | 
             
                    else
         | 
| 514 | 
            -
                       | 
| 513 | 
            +
                      name = cookie_name
         | 
| 514 | 
            +
                      value = cookie_data
         | 
| 515 515 | 
             
                    end
         | 
| 516 | 
            +
                    
         | 
| 517 | 
            +
                    raise "Unexpected lines: #{value.lines.to_a.length}." if value.lines.to_a.length != 1
         | 
| 518 | 
            +
                    cstr << "#{Http2::Utils.urlenc(name)}=#{Http2::Utils.urlenc(value)}"
         | 
| 516 519 | 
             
                  end
         | 
| 517 520 |  | 
| 518 521 | 
             
                  headers_hash["Cookie"] = cstr
         | 
| @@ -568,7 +571,7 @@ class Http2 | |
| 568 571 |  | 
| 569 572 | 
             
                  break if line.to_s == ""
         | 
| 570 573 |  | 
| 571 | 
            -
                  if @mode == "headers" and line ==  | 
| 574 | 
            +
                  if @mode == "headers" and (line == "\n" || line == "\r\n")
         | 
| 572 575 | 
             
                    puts "Http2: Changing mode to body!" if @debug
         | 
| 573 576 | 
             
                    raise "No headers was given at all? Possibly corrupt state after last request?" if @resp.headers.empty?
         | 
| 574 577 | 
             
                    break if @length == 0
         | 
| @@ -654,6 +657,10 @@ class Http2 | |
| 654 657 | 
             
                  err = Http2::Errors::Noaccess.new(resp.body)
         | 
| 655 658 | 
             
                  err.response = resp
         | 
| 656 659 | 
             
                  raise err
         | 
| 660 | 
            +
                elsif @raise_errors && resp.args[:code].to_i == 400
         | 
| 661 | 
            +
                  err = Http2::Errors::Badrequest.new(resp.body)
         | 
| 662 | 
            +
                  err.response = resp
         | 
| 663 | 
            +
                  raise err
         | 
| 657 664 | 
             
                elsif @raise_errors && resp.args[:code].to_i == 404
         | 
| 658 665 | 
             
                  err = Http2::Errors::Notfound.new(resp.body)
         | 
| 659 666 | 
             
                  err.response = resp
         | 
| @@ -734,14 +741,14 @@ class Http2 | |
| 734 741 |  | 
| 735 742 | 
             
                    if len > 0
         | 
| 736 743 | 
             
                      read = @sock.read(len)
         | 
| 737 | 
            -
                      return "break" if read == "" or read ==  | 
| 744 | 
            +
                      return "break" if read == "" or (read == "\n" || read == "\r\n")
         | 
| 738 745 | 
             
                      @resp.args[:body] << read
         | 
| 739 746 | 
             
                      self.on_content_call(args, read)
         | 
| 740 747 | 
             
                    end
         | 
| 741 748 |  | 
| 742 749 | 
             
                    nl = @sock.gets
         | 
| 743 750 | 
             
                    if len == 0
         | 
| 744 | 
            -
                      if nl ==  | 
| 751 | 
            +
                      if nl == "\n" || nl == "\r\n"
         | 
| 745 752 | 
             
                        return "break"
         | 
| 746 753 | 
             
                      else
         | 
| 747 754 | 
             
                        raise "Dont know what to do :'-("
         | 
    
        data/spec/http2_spec.rb
    CHANGED
    
    | @@ -97,12 +97,13 @@ describe "Http2" do | |
| 97 97 | 
             
                ]
         | 
| 98 98 | 
             
                urls = ["robots.txt"]
         | 
| 99 99 |  | 
| 100 | 
            -
                 | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 100 | 
            +
                Http2.new(:host => "www.partyworm.dk", :debug => false) do |http|
         | 
| 101 | 
            +
                  0.upto(105) do |count|
         | 
| 102 | 
            +
                    url = urls[rand(urls.size)]
         | 
| 103 | 
            +
                    #print "Doing request #{count} of 200 (#{url}).\n"
         | 
| 104 | 
            +
                    res = http.get(url)
         | 
| 105 | 
            +
                    raise "Body was empty." if res.body.to_s.length <= 0
         | 
| 106 | 
            +
                  end
         | 
| 106 107 | 
             
                end
         | 
| 107 108 | 
             
              end
         | 
| 108 109 |  | 
| @@ -113,7 +114,38 @@ describe "Http2" do | |
| 113 114 |  | 
| 114 115 | 
             
              it "should raise exception when something is not found" do
         | 
| 115 116 | 
             
                expect{
         | 
| 116 | 
            -
                   | 
| 117 | 
            +
                  Http2.new(:host => "www.partyworm.dk") do |http|
         | 
| 118 | 
            +
                    http.get("something_that_does_not_exist.php")
         | 
| 119 | 
            +
                  end
         | 
| 117 120 | 
             
                }.to raise_error
         | 
| 118 121 | 
             
              end
         | 
| 122 | 
            +
              
         | 
| 123 | 
            +
              it "should be able to post json" do
         | 
| 124 | 
            +
                Http2.new(:host => "http2test.kaspernj.org") do |http|
         | 
| 125 | 
            +
                  res = http.post(
         | 
| 126 | 
            +
                    :url => "/jsontest.php",
         | 
| 127 | 
            +
                    :json => {:testkey => "testvalue"}
         | 
| 128 | 
            +
                  )
         | 
| 129 | 
            +
                  
         | 
| 130 | 
            +
                  data = JSON.parse(res.body)
         | 
| 131 | 
            +
                  data["_SERVER"]["CONTENT_TYPE"].should eql("application/json")
         | 
| 132 | 
            +
                  data["PHP_JSON_INPUT"]["testkey"].should eql("testvalue")
         | 
| 133 | 
            +
                end
         | 
| 134 | 
            +
              end
         | 
| 135 | 
            +
              
         | 
| 136 | 
            +
              it "should be able to post custom content types" do
         | 
| 137 | 
            +
                require "json"
         | 
| 138 | 
            +
                
         | 
| 139 | 
            +
                Http2.new(:host => "http2test.kaspernj.org") do |http|
         | 
| 140 | 
            +
                  res = http.post(
         | 
| 141 | 
            +
                    :url => "/content_type_test.php",
         | 
| 142 | 
            +
                    :content_type => "plain/text",
         | 
| 143 | 
            +
                    :post => "test1_test2_test3"
         | 
| 144 | 
            +
                  )
         | 
| 145 | 
            +
                  
         | 
| 146 | 
            +
                  data = JSON.parse(res.body)
         | 
| 147 | 
            +
                  data["_SERVER"]["CONTENT_TYPE"].should eql("plain/text")
         | 
| 148 | 
            +
                  data["PHP_INPUT"].should eql("test1_test2_test3")
         | 
| 149 | 
            +
                end
         | 
| 150 | 
            +
              end
         | 
| 119 151 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,75 +1,75 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: http2
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0.22
         | 
| 5 4 | 
             
              prerelease: 
         | 
| 5 | 
            +
              version: 0.0.23
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| 8 8 | 
             
            - Kasper Johansen
         | 
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2013- | 
| 12 | 
            +
            date: 2013-11-15 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 | 
            -
               | 
| 16 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 15 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 17 16 | 
             
                none: false
         | 
| 18 17 | 
             
                requirements:
         | 
| 19 18 | 
             
                - - ~>
         | 
| 20 19 | 
             
                  - !ruby/object:Gem::Version
         | 
| 21 20 | 
             
                    version: 2.8.0
         | 
| 21 | 
            +
              name: rspec
         | 
| 22 22 | 
             
              type: :development
         | 
| 23 23 | 
             
              prerelease: false
         | 
| 24 | 
            -
               | 
| 24 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 25 25 | 
             
                none: false
         | 
| 26 26 | 
             
                requirements:
         | 
| 27 27 | 
             
                - - ~>
         | 
| 28 28 | 
             
                  - !ruby/object:Gem::Version
         | 
| 29 29 | 
             
                    version: 2.8.0
         | 
| 30 30 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 31 | 
            -
               | 
| 32 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 31 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 33 32 | 
             
                none: false
         | 
| 34 33 | 
             
                requirements:
         | 
| 35 34 | 
             
                - - ~>
         | 
| 36 35 | 
             
                  - !ruby/object:Gem::Version
         | 
| 37 36 | 
             
                    version: '3.12'
         | 
| 37 | 
            +
              name: rdoc
         | 
| 38 38 | 
             
              type: :development
         | 
| 39 39 | 
             
              prerelease: false
         | 
| 40 | 
            -
               | 
| 40 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 41 41 | 
             
                none: false
         | 
| 42 42 | 
             
                requirements:
         | 
| 43 43 | 
             
                - - ~>
         | 
| 44 44 | 
             
                  - !ruby/object:Gem::Version
         | 
| 45 45 | 
             
                    version: '3.12'
         | 
| 46 46 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 47 | 
            -
               | 
| 48 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 47 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 49 48 | 
             
                none: false
         | 
| 50 49 | 
             
                requirements:
         | 
| 51 50 | 
             
                - - ! '>='
         | 
| 52 51 | 
             
                  - !ruby/object:Gem::Version
         | 
| 53 52 | 
             
                    version: 1.0.0
         | 
| 53 | 
            +
              name: bundler
         | 
| 54 54 | 
             
              type: :development
         | 
| 55 55 | 
             
              prerelease: false
         | 
| 56 | 
            -
               | 
| 56 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 57 57 | 
             
                none: false
         | 
| 58 58 | 
             
                requirements:
         | 
| 59 59 | 
             
                - - ! '>='
         | 
| 60 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 61 | 
             
                    version: 1.0.0
         | 
| 62 62 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 63 | 
            -
               | 
| 64 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 63 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 64 | 
             
                none: false
         | 
| 66 65 | 
             
                requirements:
         | 
| 67 66 | 
             
                - - ~>
         | 
| 68 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 69 68 | 
             
                    version: 1.8.4
         | 
| 69 | 
            +
              name: jeweler
         | 
| 70 70 | 
             
              type: :development
         | 
| 71 71 | 
             
              prerelease: false
         | 
| 72 | 
            -
               | 
| 72 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 73 73 | 
             
                none: false
         | 
| 74 74 | 
             
                requirements:
         | 
| 75 75 | 
             
                - - ~>
         | 
| @@ -111,10 +111,10 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 111 111 | 
             
              requirements:
         | 
| 112 112 | 
             
              - - ! '>='
         | 
| 113 113 | 
             
                - !ruby/object:Gem::Version
         | 
| 114 | 
            -
                  version: '0'
         | 
| 115 114 | 
             
                  segments:
         | 
| 116 115 | 
             
                  - 0
         | 
| 117 | 
            -
                  hash: - | 
| 116 | 
            +
                  hash: -1592181993674694658
         | 
| 117 | 
            +
                  version: '0'
         | 
| 118 118 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 119 119 | 
             
              none: false
         | 
| 120 120 | 
             
              requirements:
         |