knjrbfw 0.0.33 → 0.0.34

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 CHANGED
@@ -1 +1 @@
1
- 0.0.33
1
+ 0.0.34
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{knjrbfw}
8
- s.version = "0.0.33"
8
+ s.version = "0.0.34"
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 = %q{2012-05-18}
12
+ s.date = %q{2012-05-19}
13
13
  s.description = %q{Including stuff for HTTP, SSH and much more.}
14
14
  s.email = %q{k@spernj.org}
15
15
  s.extra_rdoc_files = [
@@ -2,7 +2,7 @@
2
2
  module Knj::Gtk2
3
3
  #Autoloader.
4
4
  def self.const_missing(name)
5
- require "#{$knjpath}knj/gtk2_#{name.to_s.downcase}"
5
+ require "#{$knjpath}gtk2_#{name.to_s.downcase}"
6
6
  return Knj::Gtk2.const_get(name)
7
7
  end
8
8
 
@@ -6,6 +6,7 @@ class Knj::Gtk2::StatusWindow
6
6
  @window.modal = true
7
7
  @window.border_width = 8
8
8
  @window.set_frame_dimensions(3, 3, 3, 3)
9
+ @window.window_position = Gtk::Window::POS_CENTER_ALWAYS
9
10
  @window.signal_connect("destroy") do
10
11
  destroy
11
12
  end
@@ -1,4 +1,5 @@
1
1
  require "#{$knjpath}web"
2
+ require "socket"
2
3
 
3
4
  #This class tries to emulate a browser in Ruby without any visual stuff. Remember cookies, keep sessions alive, reset connections according to keep-alive rules and more.
4
5
  #===Examples
@@ -21,7 +22,9 @@ class Knj::Http2
21
22
  @args = args
22
23
  @cookies = {}
23
24
  @debug = @args[:debug]
24
- @mutex = Mutex.new
25
+
26
+ require "monitor"
27
+ @mutex = Monitor.new
25
28
 
26
29
  if !@args[:port]
27
30
  if @args[:ssl]
@@ -155,25 +158,20 @@ class Knj::Http2
155
158
  # res = http.get("somepage.html")
156
159
  # print res.body #=> <String>-object containing the HTML gotten.
157
160
  def get(addr, args = {})
158
- begin
159
- @mutex.synchronize do
160
- args[:addr] = addr
161
- header_str = "GET /#{addr} HTTP/1.1#{@nl}"
162
- header_str << self.header_str(self.default_headers(args), args)
163
- header_str << "#{@nl}"
164
-
165
- print "Http2: Writing headers.\n" if @debug
166
- self.write(header_str)
167
-
168
- print "Http2: Reading response.\n" if @debug
169
- resp = self.read_response(args)
170
-
171
- print "Http2: Done with get request.\n" if @debug
172
- return resp
173
- end
174
- rescue Knj::Errors::Retry => e
175
- print "Redirecting to: #{e.message}\n" if @debug
176
- return self.get(e.message, args)
161
+ @mutex.synchronize do
162
+ args[:addr] = addr
163
+ header_str = "GET /#{addr} HTTP/1.1#{@nl}"
164
+ header_str << self.header_str(self.default_headers(args), args)
165
+ header_str << "#{@nl}"
166
+
167
+ print "Http2: Writing headers.\n" if @debug
168
+ self.write(header_str)
169
+
170
+ print "Http2: Reading response.\n" if @debug
171
+ resp = self.read_response(args)
172
+
173
+ print "Http2: Done with get request.\n" if @debug
174
+ return resp
177
175
  end
178
176
  end
179
177
 
@@ -242,20 +240,20 @@ class Knj::Http2
242
240
  #===Examples
243
241
  # res = http.post("login.php", {"username" => "John Doe", "password" => 123)
244
242
  def post(addr, pdata = {}, args = {})
245
- begin
246
- @mutex.synchronize do
247
- praw = Knj::Http2.post_convert_data(pdata)
248
-
249
- header_str = "POST /#{addr} HTTP/1.1#{@nl}"
250
- header_str << self.header_str(self.default_headers(args).merge("Content-Length" => praw.length), args)
251
- header_str << "#{@nl}"
252
- header_str << praw
253
-
254
- self.write(header_str)
255
- return self.read_response(args)
256
- end
257
- rescue Knj::Errors::Retry => e
258
- return self.get(e.message, args)
243
+ @mutex.synchronize do
244
+ print "Doing post.\n" if @debug
245
+
246
+ praw = Knj::Http2.post_convert_data(pdata)
247
+
248
+ header_str = "POST /#{addr} HTTP/1.1#{@nl}"
249
+ header_str << self.header_str(self.default_headers(args).merge("Content-Length" => praw.length), args)
250
+ header_str << "#{@nl}"
251
+ header_str << praw
252
+
253
+ print "Header str: #{header_str}\n" if @debug
254
+
255
+ self.write(header_str)
256
+ return self.read_response(args)
259
257
  end
260
258
  end
261
259
 
@@ -263,51 +261,50 @@ class Knj::Http2
263
261
  #===Examples
264
262
  # res = http.post_multipart("upload.php", {"normal_value" => 123, "file" => Tempfile.new(?)})
265
263
  def post_multipart(addr, pdata, args = {})
266
- begin
267
- @mutex.synchronize do
268
- boundary = Digest::MD5.hexdigest(Time.now.to_f.to_s)
264
+ require "digest"
265
+
266
+ @mutex.synchronize do
267
+ boundary = Digest::MD5.hexdigest(Time.now.to_f.to_s)
268
+
269
+ praw = ""
270
+ pdata.each do |key, val|
271
+ praw << "--#{boundary}#{@nl}"
269
272
 
270
- praw = ""
271
- pdata.each do |key, val|
272
- praw << "--#{boundary}#{@nl}"
273
-
274
- if val.class.name == "Tempfile" and val.respond_to?("original_filename")
275
- praw << "Content-Disposition: form-data; name=\"#{key}\"; filename=\"#{val.original_filename}\";#{@nl}"
276
- praw << "Content-Length: #{val.bytesize}#{@nl}"
277
- elsif val.is_a?(Hash) and val[:filename]
278
- praw << "Content-Disposition: form-data; name=\"#{key}\"; filename=\"#{val[:filename]}\";#{@nl}"
279
- praw << "Content-Length: #{val[:content].bytesize}#{@nl}"
280
- else
281
- praw << "Content-Disposition: form-data; name=\"#{key}\";#{@nl}"
282
- praw << "Content-Length: #{val.bytesize}#{@nl}"
283
- end
284
-
285
- praw << "Content-Type: text/plain#{@nl}"
286
- praw << @nl
287
-
288
- if val.is_a?(StringIO)
289
- praw << val.read
290
- elsif val.is_a?(Hash) and val[:content]
291
- praw << val[:content].to_s
292
- else
293
- praw << val.to_s
294
- end
295
-
296
- praw << @nl
273
+ if val.class.name == "Tempfile" and val.respond_to?("original_filename")
274
+ praw << "Content-Disposition: form-data; name=\"#{key}\"; filename=\"#{val.original_filename}\";#{@nl}"
275
+ praw << "Content-Length: #{val.bytesize}#{@nl}"
276
+ elsif val.is_a?(Hash) and val[:filename]
277
+ praw << "Content-Disposition: form-data; name=\"#{key}\"; filename=\"#{val[:filename]}\";#{@nl}"
278
+ praw << "Content-Length: #{val[:content].bytesize}#{@nl}"
279
+ else
280
+ praw << "Content-Disposition: form-data; name=\"#{key}\";#{@nl}"
281
+ praw << "Content-Length: #{val.bytesize}#{@nl}"
297
282
  end
298
283
 
299
- header_str = "POST /#{addr} HTTP/1.1#{@nl}"
300
- header_str << "Content-Type: multipart/form-data; boundary=#{boundary}#{@nl}"
301
- header_str << self.header_str(self.default_headers(args).merge("Content-Length" => praw.bytesize), args)
302
- header_str << "#{@nl}"
303
- header_str << praw
304
- header_str << "--#{boundary}--"
284
+ praw << "Content-Type: text/plain#{@nl}"
285
+ praw << @nl
305
286
 
306
- self.write(header_str)
307
- return self.read_response(args)
287
+ if val.is_a?(StringIO)
288
+ praw << val.read
289
+ elsif val.is_a?(Hash) and val[:content]
290
+ praw << val[:content].to_s
291
+ else
292
+ praw << val.to_s
293
+ end
294
+
295
+ praw << @nl
308
296
  end
309
- rescue Knj::Errors::Retry => e
310
- return self.get(e.message, args)
297
+
298
+ header_str = "POST /#{addr} HTTP/1.1#{@nl}"
299
+ header_str << self.header_str(self.default_headers(args).merge("Content-Type" => "multipart/form-data; boundary=#{boundary}", "Content-Length" => praw.bytesize), args)
300
+ header_str << "#{@nl}"
301
+ header_str << praw
302
+ header_str << "--#{boundary}--"
303
+
304
+ print "Headerstr: #{header_str}\n" if @debug
305
+
306
+ self.write(header_str)
307
+ return self.read_response(args)
311
308
  end
312
309
  end
313
310
 
@@ -353,15 +350,18 @@ class Knj::Http2
353
350
  else
354
351
  line = @sock.gets
355
352
  end
353
+
354
+ print "<#{@mode}>: '#{line}'\n" if @debug
356
355
  rescue Errno::ECONNRESET
357
356
  print "Http2: The connection was reset while reading - breaking gently...\n" if @debug
358
- line = ""
359
357
  @sock = nil
358
+ break
360
359
  end
361
360
 
362
361
  break if line.to_s == ""
363
362
 
364
363
  if @mode == "headers" and line == @nl
364
+ print "Changing mode to body!\n" if @debug
365
365
  break if @length == 0
366
366
  @mode = "body"
367
367
  next
@@ -406,17 +406,22 @@ class Knj::Http2
406
406
  raise "No status-code was received from the server.\n\nHeaders:\n#{Knj::Php.print_r(resp.headers, true)}\n\nBody:\n#{resp.args[:body]}" if !resp.args[:code]
407
407
 
408
408
  if resp.args[:code].to_s == "302" and resp.header?("location") and (!@args.key?(:follow_redirects) or @args[:follow_redirects])
409
+ require "uri"
409
410
  uri = URI.parse(resp.header("location"))
411
+ url = uri.path
412
+ url << "?#{uri.query}" if uri.query.to_s.length > 0
410
413
 
411
414
  args = {:host => uri.host}
412
415
  args[:ssl] = true if uri.scheme == "https"
413
416
  args[:port] = uri.port if uri.port
414
417
 
418
+ print "Redirecting from location-header to '#{url}'.\n" if @debug
419
+
415
420
  if !args[:host] or args[:host] == @args[:host]
416
- raise Knj::Errors::Retry, resp.header("location")
421
+ return self.get(url)
417
422
  else
418
423
  http = Knj::Http2.new(args)
419
- return http.get(uri.path)
424
+ return http.get(url)
420
425
  end
421
426
  elsif resp.args[:code].to_s == "500"
422
427
  raise "500 - Internal server error: '#{args[:addr]}':\n\n#{resp.body}"
@@ -476,7 +481,7 @@ class Knj::Http2
476
481
  @resp.args[:code] = match[2]
477
482
  @resp.args[:http_version] = match[1]
478
483
  else
479
- raise "Could not understand header string: '#{line}'."
484
+ raise "Could not understand header string: '#{line}'.\n\n#{@sock.read(409600)}"
480
485
  end
481
486
  end
482
487
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: knjrbfw
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.33
5
+ version: 0.0.34
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kasper Johansen
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-05-18 00:00:00 +02:00
13
+ date: 2012-05-19 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -371,7 +371,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
371
371
  requirements:
372
372
  - - ">="
373
373
  - !ruby/object:Gem::Version
374
- hash: 2685186522234907408
374
+ hash: -3216752149804920107
375
375
  segments:
376
376
  - 0
377
377
  version: "0"