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