lib/knj/http2.rb in knjrbfw-0.0.23 vs lib/knj/http2.rb in knjrbfw-0.0.24

- old
+ new

@@ -1,12 +1,13 @@ +require "#{$knjpath}web" + class Knj::Http2 attr_reader :cookies def initialize(args = {}) args = {:host => args} if args.is_a?(String) raise "Arguments wasnt a hash." if !args.is_a?(Hash) - require "#{$knjpath}web" @args = args @cookies = {} @debug = @args[:debug] @mutex = Mutex.new @@ -133,10 +134,11 @@ end def get(addr, args = {}) begin @mutex.synchronize do + args[:addr] = addr header_str = "GET /#{addr} HTTP/1.1#{@nl}" header_str << self.header_str(self.default_headers(args), args) header_str << "#{@nl}" print "Http2: Writing headers.\n" if @debug @@ -147,12 +149,11 @@ print "Http2: Done with get request.\n" if @debug return resp end rescue Knj::Errors::Retry => e - print "Redirecting to: #{e.message}\n" - + print "Redirecting to: #{e.message}\n" if @debug return self.get(e.message, args) end end #Tries to write a string to the socket. If it fails it reconnects and tries again. @@ -189,18 +190,35 @@ end return headers end + def self.post_convert_data(pdata) + praw = "" + + if pdata.is_a?(Hash) + pdata.each do |key, val| + praw << "&" if praw != "" + praw << "#{Knj::Web.urlenc(Knj::Http2.post_convert_data(key))}=#{Knj::Web.urlenc(Knj::Http2.post_convert_data(val))}" + end + elsif pdata.is_a?(Array) + count = 0 + pdata.each do |val| + count += 1 + praw << "#{count}=#{Knj::Web.urlenc(Knj::Http2.post_convert_data(val))}" + end + else + return pdata.to_s + end + + return praw + end + def post(addr, pdata = {}, args = {}) begin @mutex.synchronize do - praw = "" - pdata.each do |key, val| - praw << "&" if praw != "" - praw << "#{Knj::Web.urlenc(key)}=#{Knj::Web.urlenc(val)}" - end + praw = Knj::Http2.post_convert_data(pdata) header_str = "POST /#{addr} HTTP/1.1#{@nl}" header_str << self.header_str(self.default_headers(args).merge("Content-Length" => praw.length), args) header_str << "#{@nl}" header_str << praw @@ -358,10 +376,10 @@ else http = Knj::Http2.new(args) return http.get(uri.path) end elsif resp.args[:code].to_s == "500" - raise "500 - Internal server error." + raise "500 - Internal server error: '#{args[:addr]}':\n\n#{resp.body}" elsif resp.args[:code].to_s == "403" raise Knj::Errors::NoAccess else return resp end \ No newline at end of file