knjrbfw 0.0.33 → 0.0.34

Sign up to get free protection for your applications and to get access to all the features.
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"