ronin-web 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +25 -0
  3. data/Manifest.txt +36 -4
  4. data/README.txt +67 -64
  5. data/Rakefile +12 -3
  6. data/bin/ronin-web +1 -1
  7. data/lib/ronin/network/helpers/web.rb +221 -0
  8. data/lib/ronin/web.rb +1 -2
  9. data/lib/ronin/web/extensions.rb +0 -2
  10. data/lib/ronin/web/extensions/nokogiri.rb +0 -23
  11. data/lib/ronin/web/proxy.rb +3 -103
  12. data/lib/ronin/web/proxy/app.rb +31 -0
  13. data/lib/ronin/web/proxy/base.rb +41 -0
  14. data/lib/ronin/web/proxy/web.rb +42 -0
  15. data/lib/ronin/web/server.rb +3 -530
  16. data/lib/ronin/web/server/app.rb +31 -0
  17. data/lib/ronin/web/server/base.rb +334 -0
  18. data/lib/ronin/web/server/files.rb +92 -0
  19. data/lib/ronin/web/server/helpers.rb +25 -0
  20. data/lib/ronin/web/server/helpers/files.rb +126 -0
  21. data/lib/ronin/web/server/helpers/hosts.rb +72 -0
  22. data/lib/ronin/web/server/helpers/proxy.rb +153 -0
  23. data/lib/ronin/web/server/helpers/rendering.rb +36 -0
  24. data/lib/ronin/web/server/hosts.rb +86 -0
  25. data/lib/ronin/web/server/proxy.rb +116 -0
  26. data/lib/ronin/web/server/web.rb +62 -0
  27. data/lib/ronin/web/spider.rb +53 -26
  28. data/lib/ronin/web/version.rb +1 -3
  29. data/lib/ronin/web/web.rb +253 -95
  30. data/spec/spec_helper.rb +1 -1
  31. data/spec/web/proxy/base_spec.rb +9 -0
  32. data/spec/web/server/base_spec.rb +86 -0
  33. data/spec/web/server/classes/files/dir/file.txt +1 -0
  34. data/spec/web/server/classes/files/dir/index.html +1 -0
  35. data/spec/web/server/classes/files/dir2/file2.txt +1 -0
  36. data/spec/web/server/classes/files/dir3/page.xml +4 -0
  37. data/spec/web/server/classes/files/file.txt +1 -0
  38. data/spec/web/server/classes/files_app.rb +27 -0
  39. data/spec/web/server/classes/hosts_app.rb +40 -0
  40. data/spec/web/server/classes/proxy_app.rb +45 -0
  41. data/spec/web/server/classes/public1/static1.txt +1 -0
  42. data/spec/web/server/classes/public2/static2.txt +1 -0
  43. data/spec/web/server/classes/sub_app.rb +13 -0
  44. data/spec/web/server/classes/test_app.rb +20 -0
  45. data/spec/web/server/files_spec.rb +74 -0
  46. data/spec/web/server/helpers/server.rb +42 -0
  47. data/spec/web/server/hosts_spec.rb +55 -0
  48. data/spec/web/server/proxy_spec.rb +49 -0
  49. data/tasks/spec.rb +1 -0
  50. data/tasks/yard.rb +13 -0
  51. metadata +76 -17
  52. metadata.gz.sig +0 -0
  53. data/TODO.txt +0 -7
  54. data/lib/ronin/sessions/web.rb +0 -80
  55. data/lib/ronin/web/fingerprint.rb +0 -76
  56. data/spec/web/server_spec.rb +0 -142
@@ -0,0 +1,116 @@
1
+ #
2
+ # Ronin Web - A Ruby library for Ronin that provides support for web
3
+ # scraping and spidering functionality.
4
+ #
5
+ # Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation; either version 2 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with this program; if not, write to the Free Software
19
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
+ #
21
+
22
+ require 'ronin/web/server/helpers/proxy'
23
+
24
+ module Ronin
25
+ module Web
26
+ module Server
27
+ module Proxy
28
+ def self.included(base)
29
+ base.module_eval do
30
+ #
31
+ # Proxies requests to a given path.
32
+ #
33
+ # @param [String] path
34
+ # The path to proxy requests for.
35
+ #
36
+ # @param [Hash] options
37
+ # Additional options.
38
+ #
39
+ # @yield [(response), body]
40
+ # If a block is given, it will be passed the optional
41
+ # response of the proxied request and the body received
42
+ # from the proxied request.
43
+ #
44
+ # @yieldparam [Net::HTTP::Response] response
45
+ # The response.
46
+ #
47
+ # @yieldparam [String] body
48
+ # The body from the response.
49
+ #
50
+ # @example
51
+ # proxy '/login.php' do |body|
52
+ # body.gsub(/https/,'http')
53
+ # end
54
+ #
55
+ # @example
56
+ # proxy '/login*' do |response,body|
57
+ # end
58
+ #
59
+ # @since 0.2.0
60
+ #
61
+ def self.proxy(path,options={},&block)
62
+ any(path) do
63
+ proxy(options,&block)
64
+ end
65
+ end
66
+
67
+ #
68
+ # Proxies requests to a given path.
69
+ #
70
+ # @param [String] path
71
+ # The path to proxy requests for.
72
+ #
73
+ # @param [Hash] options
74
+ # Additional options.
75
+ #
76
+ # @yield [(response), page]
77
+ # If a block is given, it will be passed the optional
78
+ # response of the proxied request and the page from the
79
+ # proxied request.
80
+ #
81
+ # @yieldparam [Net::HTTP::Response] response
82
+ # The response.
83
+ #
84
+ # @yieldparam [Nokogiri::HTML, Nokogiri::XML] page
85
+ # The page from the response.
86
+ #
87
+ # @example
88
+ # proxy '/login.php' do |page|
89
+ # body.search('@action').each do |action|
90
+ # action.inner_text = action.inner_text.gsub(
91
+ # /https/, 'http'
92
+ # )
93
+ # end
94
+ # end
95
+ #
96
+ # @example
97
+ # proxy '/login*' do |response,body|
98
+ # end
99
+ #
100
+ # @since 0.2.0
101
+ #
102
+ def self.proxy_page(path,options={},&block)
103
+ any(path) do
104
+ proxy_page(options,&block)
105
+ end
106
+ end
107
+
108
+ protected
109
+
110
+ helpers Ronin::Web::Server::Helpers::Proxy
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,62 @@
1
+ #
2
+ # Ronin Web - A Ruby library for Ronin that provides support for web
3
+ # scraping and spidering functionality.
4
+ #
5
+ # Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation; either version 2 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with this program; if not, write to the Free Software
19
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
+ #
21
+
22
+ require 'ronin/web/server/app'
23
+
24
+ module Ronin
25
+ module Web
26
+ #
27
+ # Returns the Ronin Web Server.
28
+ #
29
+ # @param [Hash] options
30
+ # Additional options.
31
+ #
32
+ # @yield [server]
33
+ # If a block is given, it will be passed the current web server.
34
+ #
35
+ # @yieldparam [Server::App]
36
+ # The current web server class.
37
+ #
38
+ # @return [Server::App]
39
+ # The current web server class.
40
+ #
41
+ # @example
42
+ # Web.server do
43
+ # get '/hello' do
44
+ # 'world'
45
+ # end
46
+ # end
47
+ #
48
+ # @see Server::Base.run!
49
+ # @since 0.2.0
50
+ #
51
+ def Web.server(options={},&block)
52
+ unless class_variable_defined?('@@ronin_web_server')
53
+ @@ronin_web_server = Server::App
54
+ @@ronin_web_server.run!(options.merge(:background => true))
55
+ end
56
+
57
+ @@ronin_web_server.class_eval(&block)
58
+
59
+ return @@ronin_web_server
60
+ end
61
+ end
62
+ end
@@ -1,5 +1,4 @@
1
1
  #
2
- #--
3
2
  # Ronin Web - A Ruby library for Ronin that provides support for web
4
3
  # scraping and spidering functionality.
5
4
  #
@@ -18,11 +17,10 @@
18
17
  # You should have received a copy of the GNU General Public License
19
18
  # along with this program; if not, write to the Free Software
20
19
  # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
- #++
22
20
  #
23
21
 
24
22
  require 'ronin/web/web'
25
- require 'ronin/ui/diagnostics'
23
+ require 'ronin/ui/output/helpers'
26
24
 
27
25
  require 'spidr/agent'
28
26
 
@@ -30,31 +28,60 @@ module Ronin
30
28
  module Web
31
29
  class Spider < Spidr::Agent
32
30
 
33
- include UI::Diagnostics
31
+ include UI::Output::Helpers
34
32
 
35
33
  #
36
- # Creates a new Spider object with the given _options_ and
37
- # _block_. If a _block_ is given, it will be passed the newly created
38
- # Spider object.
39
- #
40
- # _options_ may contain the following keys:
41
- # <tt>:proxy</tt>:: The proxy to use while spidering. Defaults to
42
- # Web.proxy.
43
- # <tt>:user_agent</tt>:: The User-Agent string to send. Defaults to
44
- # Web.user_agent.
45
- # <tt>:referer</tt>:: The referer URL to send.
46
- # <tt>:delay</tt>:: Duration in seconds to pause between spidering
47
- # each link. Defaults to 0.
48
- # <tt>:host</tt>:: The host-name to visit.
49
- # <tt>:hosts</tt>:: An +Array+ of host patterns to visit.
50
- # <tt>:ignore_hosts</tt>:: An +Array+ of host patterns to not visit.
51
- # <tt>:ports</tt>:: An +Array+ of port patterns to visit.
52
- # <tt>:ignore_ports</tt>:: An +Array+ of port patterns to not visit.
53
- # <tt>:links</tt>:: An +Array+ of link patterns to visit.
54
- # <tt>:ignore_links</tt>:: An +Array+ of link patterns to not visit.
55
- # <tt>:exts</tt>:: An +Array+ of File extension patterns to visit.
56
- # <tt>:ignore_exts</tt>:: An +Array+ of File extension patterns to not
57
- # visit.
34
+ # Creates a new Spider object.
35
+ #
36
+ # @param [Hash] options
37
+ # Additional options.
38
+ #
39
+ # @option options [Hash] :proxy (Web.proxy)
40
+ # The proxy to use while spidering.
41
+ #
42
+ # @option options [String] :user_agent
43
+ # The User-Agent string to send.
44
+ #
45
+ # @option options [String] :referer
46
+ # The referer URL to send.
47
+ #
48
+ # @option options [Integer] :delay (0)
49
+ # Duration in seconds to pause between spidering each link.
50
+ #
51
+ # @option options [String, Regexp] :host
52
+ # The host-name to visit.
53
+ #
54
+ # @option options [Array] :hosts
55
+ # Patterns of host-names to visit.
56
+ #
57
+ # @option options [Array] :ignore_hosts
58
+ # Patterns of host-names not to visit.
59
+ #
60
+ # @option options [Array] :ports
61
+ # Ports to visit.
62
+ #
63
+ # @option options [Array] :ignore_ports
64
+ # Ports not to visit.
65
+ #
66
+ # @option options [Array] :links
67
+ # Patterns of links to visit.
68
+ #
69
+ # @option options [Array] :ignore_links
70
+ # Patterns of links not to visit.
71
+ #
72
+ # @option options [Array] :ext
73
+ # Patterns of file extensions to accept.
74
+ #
75
+ # @option options [Array] :ignore_exts
76
+ # Patterns of file extensions to ignore.
77
+ #
78
+ # @yield [spider]
79
+ # If a block is given, it will be passed the newly created spider.
80
+ #
81
+ # @yieldparam [Spider] spider
82
+ # The newly created spider.
83
+ #
84
+ # @see http://spidr.rubyforge.org/docs/classes/Spidr/Agent.html
58
85
  #
59
86
  def initialize(options={},&block)
60
87
  options = {
@@ -1,5 +1,4 @@
1
1
  #
2
- #--
3
2
  # Ronin Web - A Ruby library for Ronin that provides support for web
4
3
  # scraping and spidering functionality.
5
4
  #
@@ -18,12 +17,11 @@
18
17
  # You should have received a copy of the GNU General Public License
19
18
  # along with this program; if not, write to the Free Software
20
19
  # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
- #++
22
20
  #
23
21
 
24
22
  module Ronin
25
23
  module Web
26
24
  # Ronin Web Version
27
- VERSION = '0.1.3'
25
+ VERSION = '0.2.0'
28
26
  end
29
27
  end
@@ -1,5 +1,4 @@
1
1
  #
2
- #--
3
2
  # Ronin Web - A Ruby library for Ronin that provides support for web
4
3
  # scraping and spidering functionality.
5
4
  #
@@ -18,7 +17,6 @@
18
17
  # You should have received a copy of the GNU General Public License
19
18
  # along with this program; if not, write to the Free Software
20
19
  # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
- #++
22
20
  #
23
21
 
24
22
  require 'ronin/network/http'
@@ -31,8 +29,19 @@ require 'open-uri'
31
29
  module Ronin
32
30
  module Web
33
31
  #
34
- # Returns a Nokogiri::HTML::Document object for the specified _body_
35
- # of html.
32
+ # Parses the body of a document into a HTML document object.
33
+ #
34
+ # @param [String, IO] body
35
+ # The body of the document to parse.
36
+ #
37
+ # @yield [doc]
38
+ # If a block is given, it will be passed the newly created document
39
+ # object.
40
+ #
41
+ # @yieldparam [Nokogiri::HTML::Document] doc
42
+ # The new HTML document object.
43
+ #
44
+ # @return [Nokogiri::HTML::Document] The new HTML document object.
36
45
  #
37
46
  def Web.html(body,&block)
38
47
  doc = Nokogiri::HTML(body)
@@ -42,8 +51,15 @@ module Ronin
42
51
  end
43
52
 
44
53
  #
45
- # Creates a new Nokogiri::HTML::Builder with the given _block_.
54
+ # Creates a new Nokogiri::HTML::Builder.
55
+ #
56
+ # @yield []
57
+ # The block that will be used to construct the HTML document.
46
58
  #
59
+ # @return [Nokogiri::HTML::Builder]
60
+ # The new HTML builder object.
61
+ #
62
+ # @example
47
63
  # Web.build_html do
48
64
  # body {
49
65
  # div(:style => 'display:none;') {
@@ -57,8 +73,19 @@ module Ronin
57
73
  end
58
74
 
59
75
  #
60
- # Returns a Nokogiri::XML::Document object for the specified _body_
61
- # of xml and the given _block_.
76
+ # Parses the body of a document into a XML document object.
77
+ #
78
+ # @param [String, IO] body
79
+ # The body of the document to parse.
80
+ #
81
+ # @yield [doc]
82
+ # If a block is given, it will be passed the newly created document
83
+ # object.
84
+ #
85
+ # @yieldparam [Nokogiri::XML::Document] doc
86
+ # The new XML document object.
87
+ #
88
+ # @return [Nokogiri::XML::Document] The new XML document object.
62
89
  #
63
90
  def Web.xml(body,&block)
64
91
  doc = Nokogiri::XML(body)
@@ -68,8 +95,15 @@ module Ronin
68
95
  end
69
96
 
70
97
  #
71
- # Creates a new Nokogiri::XML::Builder with the given _block_.
98
+ # Creates a new Nokogiri::XML::Builder.
72
99
  #
100
+ # @yield []
101
+ # The block that will be used to construct the XML document.
102
+ #
103
+ # @return [Nokogiri::XML::Builder]
104
+ # The new XML builder object.
105
+ #
106
+ # @example
73
107
  # Web.build_xml do
74
108
  # post(:id => 2) {
75
109
  # title { text("some example) }
@@ -82,104 +116,113 @@ module Ronin
82
116
  end
83
117
 
84
118
  #
85
- # Returns the default Ronin Web proxy port.
119
+ # Proxy information for Ronin::Web to use.
86
120
  #
87
- def Web.default_proxy_port
88
- Network::HTTP.default_proxy_port
89
- end
90
-
121
+ # @return [Network::HTTP::Proxy]
122
+ # The Ronin Web proxy information.
91
123
  #
92
- # Sets the default Ronin Web proxy port to the specified _port_.
93
- #
94
- def Web.default_proxy_port=(port)
95
- Network::HTTP.default_proxy_port = port
96
- end
97
-
98
- #
99
- # Returns the +Hash+ of the Ronin Web proxy information.
124
+ # @see Ronin::Network::HTTP.proxy
100
125
  #
101
126
  def Web.proxy
102
127
  Network::HTTP.proxy
103
128
  end
104
129
 
105
130
  #
106
- # Resets the Web proxy settings.
131
+ # Creates a HTTP URI based on a Hash of proxy information.
107
132
  #
108
- def Web.disable_proxy
109
- Network::HTTP.disable_proxy
110
- end
111
-
133
+ # @param [Network::HTTP::Proxy, Hash] proxy_info
134
+ # The proxy information.
112
135
  #
113
- # Creates a HTTP URI based from the given _proxy_info_ hash. The
114
- # _proxy_info_ hash defaults to Web.proxy, if not given.
136
+ # @return [URI::HTTP, nil]
137
+ # The HTTP URI that represents the proxy. If the proxy is diabled,
138
+ # +nil+ will be returned.
115
139
  #
116
140
  def Web.proxy_url(proxy_info=Web.proxy)
117
- if Web.proxy[:host]
118
- userinfo = nil
119
-
120
- if (Web.proxy[:user] || Web.proxy[:password])
121
- userinfo = "#{Web.proxy[:user]}:#{Web.proxy[:password]}"
122
- end
123
-
124
- return URI::HTTP.build(
125
- :host => Web.proxy[:host],
126
- :port => Web.proxy[:port],
127
- :userinfo => userinfo,
128
- :path => '/'
129
- )
130
- end
141
+ Network::HTTP::Proxy.new(proxy_info).url
131
142
  end
132
143
 
133
144
  #
134
- # Returns the supported Web User-Agent Aliases.
145
+ # @return [Array]
146
+ # The supported Web User-Agent Aliases.
135
147
  #
136
148
  def Web.user_agent_aliases
137
149
  WWW::Mechanize::AGENT_ALIASES
138
150
  end
139
151
 
140
152
  #
141
- # Returns the Ronin Web User-Agent
153
+ # @return [String, nil]
154
+ # The Ronin Web User-Agent
142
155
  #
143
156
  def Web.user_agent
144
157
  Network::HTTP.user_agent
145
158
  end
146
159
 
147
160
  #
148
- # Sets the Ronin Web User-Agent to the specified _new_agent_.
161
+ # Sets the Ronin Web User-Agent.
162
+ #
163
+ # @param [String] new_agent
164
+ # The User-Agent string to use.
165
+ #
166
+ # @return [String]
167
+ # The new User-Agent string.
149
168
  #
150
169
  def Web.user_agent=(new_agent)
151
170
  Network::HTTP.user_agent = new_agent
152
171
  end
153
172
 
154
173
  #
155
- # Sets the Ronin Web User-Agent to the specified user agent alias
156
- # _name_.
174
+ # Sets the Ronin Web User-Agent.
175
+ #
176
+ # @param [String] name
177
+ # The User-Agent alias to use.
178
+ #
179
+ # @return [String]
180
+ # The new User-Agent string.
157
181
  #
158
182
  def Web.user_agent_alias=(name)
159
183
  Network::HTTP.user_agent = Web.user_agent_aliases[name.to_s]
160
184
  end
161
185
 
162
186
  #
163
- # Opens the _url_ with the given _options_. The contents of the _url_
164
- # will be returned.
187
+ # Opens a URL as a temporary file.
188
+ #
189
+ # @param [Hash] options
190
+ # Additional options.
191
+ #
192
+ # @option options [String] :user_agent_alias
193
+ # The User-Agent Alias to use.
194
+ #
195
+ # @option options [String] :user_agent
196
+ # The User-Agent string to use.
165
197
  #
166
- # _options_ may contain the following keys:
167
- # <tt>:user_agent_alias</tt>:: The User-Agent Alias to use.
168
- # <tt>:user_agent</tt>:: The User-Agent string to use.
169
- # <tt>:proxy</tt>:: A +Hash+ of the proxy information to use.
170
- # <tt>:user</tt>:: The HTTP Basic Authentication user name.
171
- # <tt>:password</tt>:: The HTTP Basic Authentication password.
172
- # <tt>:content_length_proc</tt>:: A callback which will be passed the
173
- # content-length of the HTTP response.
174
- # <tt>:progress_proc</tt>:: A callback which will be passed the size
175
- # of each fragment, once received from the
176
- # server.
198
+ # @option options [Network::HTTP::Proxy, Hash] :proxy (Web.proxy)
199
+ # Proxy information.
177
200
  #
201
+ # @option options [String] :user
202
+ # The HTTP Basic Authentication user name.
203
+ #
204
+ # @option options [String] :password
205
+ # The HTTP Basic Authentication password.
206
+ #
207
+ # @option options [Proc] :content_length_proc
208
+ # A callback which will be passed the content-length of the HTTP
209
+ # response.
210
+ #
211
+ # @option options [Proc] :progress_proc
212
+ # A callback which will be passed the size of each fragment, once
213
+ # received from the server.
214
+ #
215
+ # @return [File]
216
+ # The contents of the URL.
217
+ #
218
+ # @example Open a given URL.
178
219
  # Web.open('http://www.hackety.org/')
179
220
  #
221
+ # @example Open a given URL, using a custom User-Agent alias.
180
222
  # Web.open('http://tenderlovemaking.com/',
181
223
  # :user_agent_alias => 'Linux Mozilla')
182
224
  #
225
+ # @example Open a given URL, using a custom User-Agent string.
183
226
  # Web.open('http://www.wired.com/', :user_agent => 'the future')
184
227
  #
185
228
  def Web.open(url,options={})
@@ -216,17 +259,41 @@ module Ronin
216
259
  end
217
260
 
218
261
  #
219
- # Creates a new Mechanize agent with the given _options_.
262
+ # Creates a new Mechanize Agent.
263
+ #
264
+ # @param [Hash] options
265
+ # Additional options.
266
+ #
267
+ # @option options [String] :user_agent_alias
268
+ # The User-Agent Alias to use.
269
+ #
270
+ # @option options [String] :user_agent
271
+ # The User-Agent string to use.
272
+ #
273
+ # @option options [Network::HTTP::Proxy, Hash] :proxy (Web.proxy)
274
+ # Proxy information.
220
275
  #
221
- # _options_ may contain the following keys:
222
- # <tt>:user_agent_alias</tt>:: The User-Agent Alias to use.
223
- # <tt>:user_agent</tt>:: The User-Agent string to use.
224
- # <tt>:proxy</tt>:: A +Hash+ of the proxy information to use.
276
+ # @yield [agent]
277
+ # If a block is given, it will be passed the newly created Mechanize
278
+ # agent.
225
279
  #
280
+ # @yieldparam [WWW::Mechanize] agent
281
+ # The new Mechanize agent.
282
+ #
283
+ # @return [WWW::Mechanize]
284
+ # The new Mechanize agent.
285
+ #
286
+ # @example Create a new agent.
226
287
  # Web.agent
288
+ #
289
+ # @example Create a new agent, with a custom User-Agent alias.
227
290
  # Web.agent(:user_agent_alias => 'Linux Mozilla')
291
+ #
292
+ # @example Create a new agent, with a custom User-Agent string.
228
293
  # Web.agent(:user_agent => 'wooden pants')
229
294
  #
295
+ # @see http://mechanize.rubyforge.org/mechanize/WWW/Mechanize.html
296
+ #
230
297
  def Web.agent(options={},&block)
231
298
  agent = WWW::Mechanize.new
232
299
 
@@ -248,22 +315,46 @@ module Ronin
248
315
  end
249
316
 
250
317
  #
251
- # Gets the specified _url_ with the given _options_. If a _block_ is
252
- # given, it will be passed the retrieved page.
318
+ # Creates a Mechanize Page for the contents at a given URL.
319
+ #
320
+ # @param [URI::Generic, String] url
321
+ # The URL to request.
322
+ #
323
+ # @param [Hash] options
324
+ # Additional options.
325
+ #
326
+ # @option options [String] :user_agent_alias
327
+ # The User-Agent Alias to use.
328
+ #
329
+ # @option options [String] :user_agent
330
+ # The User-Agent string to use.
253
331
  #
254
- # _options_ may contain the following keys:
255
- # <tt>:user_agent_alias</tt>:: The User-Agent Alias to use.
256
- # <tt>:user_agent</tt>:: The User-Agent string to use.
257
- # <tt>:proxy</tt>:: A +Hash+ of the proxy information to use.
332
+ # @option options [Network::HTTP::Proxy, Hash] :proxy (Web.proxy)
333
+ # Proxy information.
258
334
  #
259
- # Web.get('http://www.0x000000.com') # => WWW::Mechanize::Page
335
+ # @yield [page]
336
+ # If a block is given, it will be passed the page for the requested
337
+ # URL.
260
338
  #
339
+ # @yieldparam [WWW::Mechanize::Page] page
340
+ # The requested page.
341
+ #
342
+ # @return [WWW::Mechanize::Page]
343
+ # The requested page.
344
+ #
345
+ # @example
346
+ # Web.get('http://www.0x000000.com')
347
+ # # => WWW::Mechanize::Page
348
+ #
349
+ # @example
261
350
  # Web.get('http://www.rubyinside.com') do |page|
262
351
  # page.search('div.post/h2/a').each do |title|
263
352
  # puts title.inner_text
264
353
  # end
265
354
  # end
266
355
  #
356
+ # @see http://mechanize.rubyforge.org/mechanize/WWW/Mechanize/Page.html
357
+ #
267
358
  def Web.get(url,options={},&block)
268
359
  page = Web.agent(options).get(url)
269
360
 
@@ -272,17 +363,37 @@ module Ronin
272
363
  end
273
364
 
274
365
  #
275
- # Gets the specified _url_ with the given _options_, returning the body
276
- # of the requested page. If a _block_ is given, it will be passed the
277
- # body of the retrieved page.
366
+ # Requests the body of the Mechanize Page created from the response
367
+ # of the given URL.
368
+ #
369
+ # @param [URI::Generic, String] url
370
+ # The URL to request.
371
+ #
372
+ # @param [Hash] options
373
+ # Additional options.
374
+ #
375
+ # @option options [String] :user_agent_alias
376
+ # The User-Agent Alias to use.
377
+ #
378
+ # @option options [String] :user_agent
379
+ # The User-Agent string to use.
380
+ #
381
+ # @option options [Network::HTTP::Proxy, Hash] :proxy (Web.proxy)
382
+ # Proxy information.
278
383
  #
279
- # _options_ may contain the following keys:
280
- # <tt>:user_agent_alias</tt>:: The User-Agent Alias to use.
281
- # <tt>:user_agent</tt>:: The User-Agent string to use.
282
- # <tt>:proxy</tt>:: A +Hash+ of the proxy information to use.
384
+ # @yield [body]
385
+ # If a block is given, it will be passed the body of the page.
283
386
  #
387
+ # @yieldparam [String] body
388
+ # The requested body of the page.
389
+ #
390
+ # @return [String]
391
+ # The requested body of the page.
392
+ #
393
+ # @example
284
394
  # Web.get_body('http://www.rubyinside.com') # => String
285
395
  #
396
+ # @example
286
397
  # Web.get_body('http://www.rubyinside.com') do |body|
287
398
  # puts body
288
399
  # end
@@ -295,16 +406,39 @@ module Ronin
295
406
  end
296
407
 
297
408
  #
298
- # Posts the specified _url_ with the given _options_. If a _block_ is
299
- # given, it will be passed the posted page.
409
+ # Posts to a given URL and creates a Mechanize Page from the response.
410
+ #
411
+ # @param [URI::Generic, String] url
412
+ # The URL to request.
413
+ #
414
+ # @param [Hash] options
415
+ # Additional options.
416
+ #
417
+ # @option options [Hash] :query
418
+ # Additional query parameters to post with.
419
+ #
420
+ # @option options [String] :user_agent_alias
421
+ # The User-Agent Alia to use.
422
+ #
423
+ # @option options [String] :user_agent
424
+ # The User-Agent string to use.
425
+ #
426
+ # @option options [Network::HTTP::Proxy, Hash] :proxy (Web.proxy)
427
+ # Proxy information.
428
+ #
429
+ # @yield [page]
430
+ # If a block is given, it will be passed the page for the requested
431
+ # URL.
300
432
  #
301
- # _options_ may contain the following keys:
302
- # <tt>:query</tt>:: The query parameters to post to the specified _url_.
303
- # <tt>:user_agent_alias</tt>:: The User-Agent Alias to use.
304
- # <tt>:user_agent</tt>:: The User-Agent string to use.
305
- # <tt>:proxy</tt>:: A +Hash+ of the proxy information to use.
433
+ # @yieldparam [WWW::Mechanize::Page] page
434
+ # The requested page.
306
435
  #
307
- # Web.post('http://www.rubyinside.com') # => WWW::Mechanize::Page
436
+ # @return [WWW::Mechanize::Page]
437
+ # The requested page.
438
+ #
439
+ # @example
440
+ # Web.post('http://www.rubyinside.com')
441
+ # # => WWW::Mechanize::Page
308
442
  #
309
443
  def Web.post(url,options={},&block)
310
444
  query = {}
@@ -317,17 +451,41 @@ module Ronin
317
451
  end
318
452
 
319
453
  #
320
- # Poststhe specified _url_ with the given _options_, returning the body
321
- # of the posted page. If a _block_ is given, it will be passed the
322
- # body of the posted page.
454
+ # Posts to a given URL and returns the body of the Mechanize Page
455
+ # created from the response.
456
+ #
457
+ # @param [URI::Generic, String] url
458
+ # The URL to request.
459
+ #
460
+ # @param [Hash] options
461
+ # Additional options.
462
+ #
463
+ # @option options [Hash] :query
464
+ # Additional query parameters to post with.
465
+ #
466
+ # @option options [String] :user_agent_alias
467
+ # The User-Agent Alias to use.
468
+ #
469
+ # @option options [String] :user_agent
470
+ # The User-Agent string to use.
471
+ #
472
+ # @option options [Network::HTTP::Proxy, Hash] :proxy (Web.proxy)
473
+ # Proxy information.
474
+ #
475
+ # @yield [body]
476
+ # If a block is given, it will be passed the body of the page.
477
+ #
478
+ # @yieldparam [WWW::Mechanize::Page] page
479
+ # The body of the requested page.
323
480
  #
324
- # _options_ may contain the following keys:
325
- # <tt>:user_agent_alias</tt>:: The User-Agent Alias to use.
326
- # <tt>:user_agent</tt>:: The User-Agent string to use.
327
- # <tt>:proxy</tt>:: A +Hash+ of the proxy information to use.
481
+ # @return [WWW::Mechanize::Page]
482
+ # The body of the requested page.
328
483
  #
329
- # Web.post_body('http://www.rubyinside.com') # => String
484
+ # @example
485
+ # Web.post_body('http://www.rubyinside.com')
486
+ # # => String
330
487
  #
488
+ # @example
331
489
  # Web.post_body('http://www.rubyinside.com') do |body|
332
490
  # puts body
333
491
  # end