mechanize 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of mechanize might be problematic. Click here for more details.

Files changed (242) hide show
  1. data/README +32 -0
  2. data/doc/classes/Net/HTTP.html +1716 -0
  3. data/doc/classes/Net/HTTP.src/M000103.html +18 -0
  4. data/doc/classes/Net/HTTP.src/M000104.html +18 -0
  5. data/doc/classes/Net/HTTP.src/M000105.html +18 -0
  6. data/doc/classes/Net/HTTP.src/M000106.html +18 -0
  7. data/doc/classes/Net/HTTP.src/M000107.html +29 -0
  8. data/doc/classes/Net/HTTP.src/M000108.html +18 -0
  9. data/doc/classes/Net/HTTP.src/M000109.html +22 -0
  10. data/doc/classes/Net/HTTP.src/M000110.html +18 -0
  11. data/doc/classes/Net/HTTP.src/M000111.html +18 -0
  12. data/doc/classes/Net/HTTP.src/M000112.html +18 -0
  13. data/doc/classes/Net/HTTP.src/M000113.html +18 -0
  14. data/doc/classes/Net/HTTP.src/M000114.html +22 -0
  15. data/doc/classes/Net/HTTP.src/M000115.html +29 -0
  16. data/doc/classes/Net/HTTP.src/M000116.html +18 -0
  17. data/doc/classes/Net/HTTP.src/M000117.html +19 -0
  18. data/doc/classes/Net/HTTP.src/M000118.html +19 -0
  19. data/doc/classes/Net/HTTP.src/M000119.html +18 -0
  20. data/doc/classes/Net/HTTP.src/M000121.html +18 -0
  21. data/doc/classes/Net/HTTP.src/M000122.html +28 -0
  22. data/doc/classes/Net/HTTP.src/M000123.html +19 -0
  23. data/doc/classes/Net/HTTP.src/M000124.html +30 -0
  24. data/doc/classes/Net/HTTP.src/M000125.html +18 -0
  25. data/doc/classes/Net/HTTP.src/M000126.html +18 -0
  26. data/doc/classes/Net/HTTP.src/M000127.html +18 -0
  27. data/doc/classes/Net/HTTP.src/M000128.html +18 -0
  28. data/doc/classes/Net/HTTP.src/M000129.html +18 -0
  29. data/doc/classes/Net/HTTP.src/M000130.html +18 -0
  30. data/doc/classes/Net/HTTP.src/M000133.html +28 -0
  31. data/doc/classes/Net/HTTP.src/M000134.html +20 -0
  32. data/doc/classes/Net/HTTP.src/M000135.html +28 -0
  33. data/doc/classes/Net/HTTP.src/M000136.html +18 -0
  34. data/doc/classes/Net/HTTP.src/M000137.html +18 -0
  35. data/doc/classes/Net/HTTP.src/M000138.html +18 -0
  36. data/doc/classes/Net/HTTP.src/M000139.html +18 -0
  37. data/doc/classes/Net/HTTP.src/M000140.html +18 -0
  38. data/doc/classes/Net/HTTP.src/M000141.html +18 -0
  39. data/doc/classes/Net/HTTP.src/M000142.html +18 -0
  40. data/doc/classes/Net/HTTP.src/M000143.html +18 -0
  41. data/doc/classes/Net/HTTP.src/M000144.html +18 -0
  42. data/doc/classes/Net/HTTP.src/M000145.html +18 -0
  43. data/doc/classes/Net/HTTP.src/M000146.html +18 -0
  44. data/doc/classes/Net/HTTP.src/M000147.html +18 -0
  45. data/doc/classes/Net/HTTP.src/M000148.html +18 -0
  46. data/doc/classes/Net/HTTP.src/M000152.html +19 -0
  47. data/doc/classes/Net/HTTP.src/M000153.html +39 -0
  48. data/doc/classes/Net/HTTP.src/M000154.html +18 -0
  49. data/doc/classes/Net/HTTP.src/M000156.html +24 -0
  50. data/doc/classes/Net/HTTP.src/M000157.html +18 -0
  51. data/doc/classes/Net/HTTP.src/M000158.html +19 -0
  52. data/doc/classes/Net/HTTP.src/M000159.html +21 -0
  53. data/doc/classes/Net/HTTP.src/M000161.html +19 -0
  54. data/doc/classes/Net/HTTP/Copy.html +134 -0
  55. data/doc/classes/Net/HTTP/Delete.html +134 -0
  56. data/doc/classes/Net/HTTP/Get.html +134 -0
  57. data/doc/classes/Net/HTTP/Head.html +134 -0
  58. data/doc/classes/Net/HTTP/Lock.html +134 -0
  59. data/doc/classes/Net/HTTP/Mkcol.html +134 -0
  60. data/doc/classes/Net/HTTP/Move.html +134 -0
  61. data/doc/classes/Net/HTTP/Options.html +134 -0
  62. data/doc/classes/Net/HTTP/Post.html +134 -0
  63. data/doc/classes/Net/HTTP/Propfind.html +134 -0
  64. data/doc/classes/Net/HTTP/Proppatch.html +134 -0
  65. data/doc/classes/Net/HTTP/Put.html +134 -0
  66. data/doc/classes/Net/HTTP/Trace.html +134 -0
  67. data/doc/classes/Net/HTTP/Unlock.html +134 -0
  68. data/doc/classes/Net/HTTPError.html +120 -0
  69. data/doc/classes/Net/HTTPExceptions.html +137 -0
  70. data/doc/classes/Net/HTTPFatalError.html +120 -0
  71. data/doc/classes/Net/HTTPGenericRequest.html +274 -0
  72. data/doc/classes/Net/HTTPGenericRequest.src/M000088.html +26 -0
  73. data/doc/classes/Net/HTTPGenericRequest.src/M000089.html +18 -0
  74. data/doc/classes/Net/HTTPGenericRequest.src/M000090.html +18 -0
  75. data/doc/classes/Net/HTTPGenericRequest.src/M000091.html +18 -0
  76. data/doc/classes/Net/HTTPGenericRequest.src/M000092.html +19 -0
  77. data/doc/classes/Net/HTTPGenericRequest.src/M000093.html +20 -0
  78. data/doc/classes/Net/HTTPGenericRequest.src/M000094.html +20 -0
  79. data/doc/classes/Net/HTTPHeader.html +734 -0
  80. data/doc/classes/Net/HTTPHeader.src/M000055.html +23 -0
  81. data/doc/classes/Net/HTTPHeader.src/M000056.html +19 -0
  82. data/doc/classes/Net/HTTPHeader.src/M000057.html +22 -0
  83. data/doc/classes/Net/HTTPHeader.src/M000058.html +22 -0
  84. data/doc/classes/Net/HTTPHeader.src/M000059.html +19 -0
  85. data/doc/classes/Net/HTTPHeader.src/M000060.html +19 -0
  86. data/doc/classes/Net/HTTPHeader.src/M000061.html +20 -0
  87. data/doc/classes/Net/HTTPHeader.src/M000063.html +18 -0
  88. data/doc/classes/Net/HTTPHeader.src/M000065.html +20 -0
  89. data/doc/classes/Net/HTTPHeader.src/M000066.html +20 -0
  90. data/doc/classes/Net/HTTPHeader.src/M000067.html +18 -0
  91. data/doc/classes/Net/HTTPHeader.src/M000068.html +18 -0
  92. data/doc/classes/Net/HTTPHeader.src/M000069.html +18 -0
  93. data/doc/classes/Net/HTTPHeader.src/M000070.html +20 -0
  94. data/doc/classes/Net/HTTPHeader.src/M000072.html +30 -0
  95. data/doc/classes/Net/HTTPHeader.src/M000073.html +43 -0
  96. data/doc/classes/Net/HTTPHeader.src/M000075.html +21 -0
  97. data/doc/classes/Net/HTTPHeader.src/M000076.html +22 -0
  98. data/doc/classes/Net/HTTPHeader.src/M000077.html +20 -0
  99. data/doc/classes/Net/HTTPHeader.src/M000078.html +21 -0
  100. data/doc/classes/Net/HTTPHeader.src/M000079.html +19 -0
  101. data/doc/classes/Net/HTTPHeader.src/M000080.html +18 -0
  102. data/doc/classes/Net/HTTPHeader.src/M000081.html +19 -0
  103. data/doc/classes/Net/HTTPHeader.src/M000082.html +19 -0
  104. data/doc/classes/Net/HTTPHeader.src/M000083.html +23 -0
  105. data/doc/classes/Net/HTTPHeader.src/M000084.html +18 -0
  106. data/doc/classes/Net/HTTPHeader.src/M000086.html +18 -0
  107. data/doc/classes/Net/HTTPHeader.src/M000087.html +18 -0
  108. data/doc/classes/Net/HTTPRequest.html +150 -0
  109. data/doc/classes/Net/HTTPRequest.src/M000102.html +21 -0
  110. data/doc/classes/Net/HTTPResponse.html +425 -0
  111. data/doc/classes/Net/HTTPResponse.src/M000162.html +18 -0
  112. data/doc/classes/Net/HTTPResponse.src/M000163.html +18 -0
  113. data/doc/classes/Net/HTTPResponse.src/M000164.html +23 -0
  114. data/doc/classes/Net/HTTPResponse.src/M000165.html +18 -0
  115. data/doc/classes/Net/HTTPResponse.src/M000166.html +32 -0
  116. data/doc/classes/Net/HTTPResponse.src/M000167.html +18 -0
  117. data/doc/classes/Net/HTTPRetriableError.html +120 -0
  118. data/doc/classes/Net/HTTPServerException.html +120 -0
  119. data/doc/classes/Net/ProtoAuthError.html +113 -0
  120. data/doc/classes/Net/ProtoCommandError.html +113 -0
  121. data/doc/classes/Net/ProtoFatalError.html +113 -0
  122. data/doc/classes/Net/ProtoRetriableError.html +113 -0
  123. data/doc/classes/Net/ProtoServerError.html +113 -0
  124. data/doc/classes/Net/ProtoSyntaxError.html +113 -0
  125. data/doc/classes/Net/ProtoUnknownError.html +113 -0
  126. data/doc/classes/Net/ProtocolError.html +111 -0
  127. data/doc/classes/Net/WriteAdapter.html +235 -0
  128. data/doc/classes/Net/WriteAdapter.src/M000095.html +19 -0
  129. data/doc/classes/Net/WriteAdapter.src/M000096.html +18 -0
  130. data/doc/classes/Net/WriteAdapter.src/M000097.html +18 -0
  131. data/doc/classes/Net/WriteAdapter.src/M000099.html +19 -0
  132. data/doc/classes/Net/WriteAdapter.src/M000100.html +18 -0
  133. data/doc/classes/Net/WriteAdapter.src/M000101.html +18 -0
  134. data/doc/classes/REXML.html +109 -0
  135. data/doc/classes/REXML/Comment.html +137 -0
  136. data/doc/classes/REXML/Comment.src/M000053.html +18 -0
  137. data/doc/classes/REXML/Node.html +240 -0
  138. data/doc/classes/REXML/Node.src/M000047.html +21 -0
  139. data/doc/classes/REXML/Node.src/M000048.html +21 -0
  140. data/doc/classes/REXML/Node.src/M000049.html +22 -0
  141. data/doc/classes/REXML/Node.src/M000050.html +18 -0
  142. data/doc/classes/REXML/Node.src/M000051.html +18 -0
  143. data/doc/classes/REXML/Node.src/M000052.html +18 -0
  144. data/doc/classes/REXML/Text.html +137 -0
  145. data/doc/classes/REXML/Text.src/M000054.html +18 -0
  146. data/doc/classes/WWW.html +130 -0
  147. data/doc/classes/WWW/Button.html +190 -0
  148. data/doc/classes/WWW/Button.src/M000028.html +18 -0
  149. data/doc/classes/WWW/Button.src/M000029.html +18 -0
  150. data/doc/classes/WWW/Button.src/M000030.html +25 -0
  151. data/doc/classes/WWW/CheckBox.html +160 -0
  152. data/doc/classes/WWW/CheckBox.src/M000024.html +18 -0
  153. data/doc/classes/WWW/Cookie.html +207 -0
  154. data/doc/classes/WWW/Cookie.src/M000032.html +59 -0
  155. data/doc/classes/WWW/Cookie.src/M000033.html +21 -0
  156. data/doc/classes/WWW/Cookie.src/M000034.html +18 -0
  157. data/doc/classes/WWW/CookieJar.html +197 -0
  158. data/doc/classes/WWW/CookieJar.src/M000008.html +18 -0
  159. data/doc/classes/WWW/CookieJar.src/M000009.html +22 -0
  160. data/doc/classes/WWW/CookieJar.src/M000010.html +33 -0
  161. data/doc/classes/WWW/CookieJar.src/M000011.html +18 -0
  162. data/doc/classes/WWW/Field.html +174 -0
  163. data/doc/classes/WWW/Field.src/M000045.html +18 -0
  164. data/doc/classes/WWW/Field.src/M000046.html +26 -0
  165. data/doc/classes/WWW/FileUpload.html +163 -0
  166. data/doc/classes/WWW/FileUpload.src/M000031.html +19 -0
  167. data/doc/classes/WWW/Form.html +152 -0
  168. data/doc/classes/WWW/Form.src/M000044.html +19 -0
  169. data/doc/classes/WWW/GlobalForm.html +271 -0
  170. data/doc/classes/WWW/GlobalForm.src/M000004.html +24 -0
  171. data/doc/classes/WWW/GlobalForm.src/M000005.html +26 -0
  172. data/doc/classes/WWW/GlobalForm.src/M000006.html +46 -0
  173. data/doc/classes/WWW/GlobalForm.src/M000007.html +46 -0
  174. data/doc/classes/WWW/ImageButton.html +157 -0
  175. data/doc/classes/WWW/ImageButton.src/M000027.html +22 -0
  176. data/doc/classes/WWW/Link.html +160 -0
  177. data/doc/classes/WWW/Link.src/M000025.html +20 -0
  178. data/doc/classes/WWW/Mechanize.html +379 -0
  179. data/doc/classes/WWW/Mechanize.src/M000013.html +21 -0
  180. data/doc/classes/WWW/Mechanize.src/M000014.html +18 -0
  181. data/doc/classes/WWW/Mechanize.src/M000015.html +24 -0
  182. data/doc/classes/WWW/Mechanize.src/M000016.html +19 -0
  183. data/doc/classes/WWW/Mechanize.src/M000017.html +23 -0
  184. data/doc/classes/WWW/Mechanize.src/M000018.html +32 -0
  185. data/doc/classes/WWW/Mechanize.src/M000019.html +19 -0
  186. data/doc/classes/WWW/Mechanize.src/M000020.html +18 -0
  187. data/doc/classes/WWW/Mechanize.src/M000021.html +33 -0
  188. data/doc/classes/WWW/Mechanize.src/M000022.html +18 -0
  189. data/doc/classes/WWW/Meta.html +113 -0
  190. data/doc/classes/WWW/Page.html +313 -0
  191. data/doc/classes/WWW/Page.src/M000036.html +18 -0
  192. data/doc/classes/WWW/Page.src/M000037.html +18 -0
  193. data/doc/classes/WWW/Page.src/M000038.html +18 -0
  194. data/doc/classes/WWW/Page.src/M000039.html +19 -0
  195. data/doc/classes/WWW/Page.src/M000040.html +19 -0
  196. data/doc/classes/WWW/Page.src/M000041.html +19 -0
  197. data/doc/classes/WWW/Page.src/M000042.html +19 -0
  198. data/doc/classes/WWW/Page.src/M000043.html +19 -0
  199. data/doc/classes/WWW/RadioButton.html +160 -0
  200. data/doc/classes/WWW/RadioButton.src/M000012.html +18 -0
  201. data/doc/classes/WWW/ResponseCodeError.html +150 -0
  202. data/doc/classes/WWW/ResponseCodeError.src/M000035.html +18 -0
  203. data/doc/classes/WWW/SelectList.html +160 -0
  204. data/doc/classes/WWW/SelectList.src/M000026.html +28 -0
  205. data/doc/created.rid +1 -0
  206. data/doc/files/CHANGELOG.html +136 -0
  207. data/doc/files/LICENSE.html +531 -0
  208. data/doc/files/README.html +161 -0
  209. data/doc/files/lib/mechanize/cookie_rb.html +101 -0
  210. data/doc/files/lib/mechanize/net-overrides/net/http_rb.html +139 -0
  211. data/doc/files/lib/mechanize/net-overrides/net/https_rb.html +109 -0
  212. data/doc/files/lib/mechanize/net-overrides/net/protocol_rb.html +117 -0
  213. data/doc/files/lib/mechanize/parsing_rb.html +267 -0
  214. data/doc/files/lib/mechanize/parsing_rb.src/M000001.html +22 -0
  215. data/doc/files/lib/mechanize/parsing_rb.src/M000002.html +44 -0
  216. data/doc/files/lib/mechanize/parsing_rb.src/M000003.html +34 -0
  217. data/doc/files/lib/mechanize_rb.html +152 -0
  218. data/doc/fr_class_index.html +80 -0
  219. data/doc/fr_file_index.html +35 -0
  220. data/doc/fr_method_index.html +194 -0
  221. data/doc/index.html +24 -0
  222. data/doc/rdoc-style.css +208 -0
  223. data/lib/mechanize.rb +128 -26
  224. data/lib/mechanize/cookie.rb +98 -0
  225. data/lib/mechanize/net-overrides/net/http.rb +2 -2
  226. data/test/README +7 -0
  227. data/test/htdocs/find_link.html +40 -0
  228. data/test/htdocs/form_test.html +154 -0
  229. data/test/htdocs/google.html +13 -0
  230. data/test/htdocs/index.html +6 -0
  231. data/test/server.rb +19 -0
  232. data/test/servlets.rb +130 -0
  233. data/test/tc_cookies.rb +125 -0
  234. data/test/tc_forms.rb +339 -0
  235. data/test/tc_links.rb +25 -0
  236. data/test/tc_mech.rb +70 -0
  237. data/test/tc_response_code.rb +31 -0
  238. data/test/ts_mech.rb +9 -0
  239. metadata +310 -41
  240. data/Rakefile +0 -14
  241. data/examples/rubyforge.rb +0 -13
  242. data/mechanize.gemspec +0 -22
@@ -0,0 +1,98 @@
1
+ module WWW
2
+ class Cookie
3
+ attr_reader :name, :value, :path, :domain, :expires, :secure
4
+ def initialize(url, cookie_text)
5
+ cookie = Hash.new
6
+ cookie_text.split(/; /).each do |data|
7
+ name, value = data.split('=', 2)
8
+ next unless name
9
+ cookie[name] = value ? URI::unescape(value) : nil
10
+ end
11
+
12
+ @path = cookie.delete(
13
+ cookie.keys.find { |k| k.downcase == "path" }
14
+ ) || url.path
15
+
16
+ expires_key = cookie.keys.find { |k| k.downcase == "expires" }
17
+ if expires_key
18
+ @expires = DateTime.parse(cookie.delete(expires_key),
19
+ "%A %d-%b-%y %H:%M:%S %Z")
20
+ end
21
+
22
+ secure_key = cookie.keys.find { |k| k.downcase == "secure" }
23
+ if secure_key
24
+ @secure = true
25
+ cookie.delete(secure_key)
26
+ else
27
+ @secure = false
28
+ end
29
+
30
+ # Set the domain name of the cookie
31
+ domain_key = cookie.keys.find { |k| k.downcase == "domain" }
32
+ if domain_key
33
+ domain = cookie.delete(domain_key)
34
+ domain.sub!(/^\./, '')
35
+ if url.host =~ /#{domain}$/
36
+ @domain = domain
37
+ end
38
+ else
39
+ @domain = url.host
40
+ end
41
+
42
+ cookie.each { |k,v|
43
+ @name = k.strip
44
+ @value = v.strip
45
+ @string = "#{k}=#{URI::escape(v)}"
46
+ }
47
+ end
48
+
49
+ def Cookie::parse(uri, raw_cookie, &block)
50
+ esc = raw_cookie.gsub(/(expires=[^,]*),([^;]*(;|$))/i) { "#{$1}#{$2}" }
51
+ esc.split(/,/).each do |cookie|
52
+ yield Cookie.new(uri, cookie)
53
+ end
54
+ end
55
+
56
+ def to_s
57
+ @string
58
+ end
59
+ end
60
+
61
+ class CookieJar
62
+ attr_accessor :jar
63
+ def initialize
64
+ @jar = {}
65
+ end
66
+
67
+ def add(cookie)
68
+ unless @jar.has_key?(cookie.domain)
69
+ @jar[cookie.domain] = Hash.new
70
+ end
71
+
72
+ @jar[cookie.domain][cookie.name] = cookie
73
+ end
74
+
75
+ def cookies(url)
76
+ cookies = []
77
+ @jar.each_key do |domain|
78
+ if url.host =~ /#{domain}$/
79
+ @jar[domain].each_key do |name|
80
+ if url.path =~ /^#{@jar[domain][name].path}/
81
+ if @jar[domain][name].expires.nil?
82
+ cookies << @jar[domain][name]
83
+ elsif DateTime.now < @jar[domain][name].expires
84
+ cookies << @jar[domain][name]
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ cookies
92
+ end
93
+
94
+ def empty?(url)
95
+ cookies(url).length > 0 ? false : true
96
+ end
97
+ end
98
+ end
@@ -1059,7 +1059,7 @@ module Net # :nodoc:
1059
1059
  # p request['X-My-Header'] #=> "a, b, c"
1060
1060
  # p request.get_fields('X-My-Header') #=> ["a", "b", "c"]
1061
1061
  #
1062
- def add_header(key, val)
1062
+ def add_field(key, val)
1063
1063
  if @header.key?(key.downcase)
1064
1064
  @header[key.downcase].concat Array(val)
1065
1065
  else
@@ -1839,7 +1839,7 @@ module Net # :nodoc:
1839
1839
  httpv, code, msg = read_status_line(sock)
1840
1840
  res = response_class(code).new(httpv, code, msg)
1841
1841
  each_response_header(sock) do |k,v|
1842
- res.add_header k, v
1842
+ res.add_field k, v
1843
1843
  end
1844
1844
  res
1845
1845
  end
@@ -0,0 +1,7 @@
1
+ = Mechanize Testing
2
+
3
+ These unit tests require a web server up and running. To run the tests, first
4
+ execute: 'server.rb'
5
+
6
+ Once server.rb is up and running, execute 'ts_mech.rb' to run the tests.
7
+
@@ -0,0 +1,40 @@
1
+ <html>
2
+ <head>
3
+ <meta http_equiv="Refresh" content="0; url=http://www.incorrect.com">
4
+ <meta http-equiv="Rfresh" content="0; url=http://www.also-wrong.com">
5
+ <meta http-equiv="Refresh" content="0; url=http://www.drphil.com/">
6
+ <META HTTP-EQUIV="REFRESH" CONTENT="0; URL=HTTP://WWW.UPCASE.COM/">
7
+ <TITLE>Testing the links</TITLE>
8
+ </head>
9
+ <body>
10
+ <A HREF="http://blargle.com/">blargle</A>
11
+ <A HREF="http://a.cpan.org/">CPAN A</A>
12
+ <A HREF="http://b.cpan.org/">CPAN B</A>
13
+ <FRAME SRC="foo.html">
14
+ <FRAME SRC="bar.html">
15
+ <A HREF="http://c.cpan.org/" NAME="bongo">CPAN C</A>
16
+ <A HREF="http://d.cpan.org/">CPAN D</A>
17
+
18
+ <A HREF="http://www.msnbc.com/">MSNBC</A>
19
+ <FRAME SRC="http://www.oreilly.com/" NAME="wongo">
20
+ <A HREF="http://www.cnn.com/">CNN</A>
21
+ <A HREF="http://www.bbc.co.uk/" NAME="Wilma">BBC</A>
22
+ <A HREF="http://www.msnbc.com/">News</A>
23
+ <A HREF="http://www.cnn.com/" NAME="Fred">News</A>
24
+ <A HREF="http://www.bbc.co.uk/">News</A>
25
+ <A onmouseover="window.status='Rebuild Files'; return true" href="#" onClick="window.open( '/cgi-bin/MT/mt.cgi', 'rebuild', 'width=400,height=200,resizable=yes')">Rebuild Index</A>
26
+
27
+ <MAP NAME="SOME_MAP">
28
+ <AREA HREF="http://www.msnbc.com/area" COORDS="1,2,3,4"></AREA>
29
+ <AREA HREF="http://www.cnn.com/area" COORDS="5,6,7,8" NAME="Marty">
30
+ <AREA HREF="http://www.cpan.org/area" COORDS="10,11,12,13" />
31
+ </MAP>
32
+ <IMG SRC="SOME_IMAGE" USEMAP="#SOME_MAP">
33
+
34
+ <!-- new stuff -->
35
+ <A HREF="http://nowhere.org/" Name="Here">NoWhere</A>
36
+ <A HREF="http://nowhere.org/padded" Name=" Here "> NoWhere </A>
37
+ <A HREF="blongo.html">Blongo!</A>
38
+ </body>
39
+ </html>
40
+
@@ -0,0 +1,154 @@
1
+ <html>
2
+ <head><title>Page Title</title></head>
3
+ <body>
4
+ <h1>Hello World!</h1>
5
+ <form name="post_form1" method="post" action="/form_post">
6
+ <table>
7
+ <tr>
8
+ <td>First Name</td>
9
+ <td><input type="text" name="first_name" /></td>
10
+ </tr>
11
+ <tr>
12
+ <td>Gender</td>
13
+ <td>
14
+ M: <input type="radio" name="gender" value="male" /><br />
15
+ F: <input type="radio" name="gender" value="female" /><br />
16
+ </td>
17
+ </tr>
18
+ <tr>
19
+ <td>Check this if you are cool:</td>
20
+ <td><input type="checkbox" name="cool person" /></td>
21
+ </tr>
22
+ <tr>
23
+ <td>Check this if you like ham:</td>
24
+ <td><input type="checkbox" name="likes ham" /></td>
25
+ </tr>
26
+ </table><br />
27
+ <input type="submit" value="Submit" />
28
+ </form>
29
+ <form name="get_form1" method="get" action="/form_post">
30
+ <table>
31
+ <tr>
32
+ <td>First Name</td>
33
+ <td><input type="text" name="first_name" /></td>
34
+ </tr>
35
+ <tr>
36
+ <td>Gender</td>
37
+ <td>
38
+ M: <input type="radio" name="gender" value="male" /><br />
39
+ F: <input type="radio" name="gender" value="female" /><br />
40
+ </td>
41
+ </tr>
42
+ <tr>
43
+ <td>Check this if you are cool:</td>
44
+ <td><input type="checkbox" name="cool person" /></td>
45
+ </tr>
46
+ <tr>
47
+ <td>Check this if you like ham:</td>
48
+ <td><input type="checkbox" name="likes ham" /></td>
49
+ </tr>
50
+ </table><br />
51
+ <input type="submit" value="Submit" />
52
+ </form>
53
+
54
+ <!-- Get ant post to a form with a space in the name -->
55
+ <form name="post_form2" method="post" action="/form post">
56
+ <table>
57
+ <tr>
58
+ <td>First Name</td>
59
+ <td><input type="text" name="first_name" /></td>
60
+ </tr>
61
+ <tr>
62
+ <td>Gender</td>
63
+ <td>
64
+ M: <input type="radio" name="gender" value="male" /><br />
65
+ F: <input type="radio" name="gender" value="female" /><br />
66
+ </td>
67
+ </tr>
68
+ <tr>
69
+ <td>Check this if you are cool:</td>
70
+ <td><input type="checkbox" name="cool person" /></td>
71
+ </tr>
72
+ <tr>
73
+ <td>Check this if you like ham:</td>
74
+ <td><input type="checkbox" name="likes ham" /></td>
75
+ </tr>
76
+ </table><br />
77
+ <input type="submit" value="Submit" />
78
+ </form>
79
+ <form name="get_form2" method="get" action="/form post">
80
+ <table>
81
+ <tr>
82
+ <td>First Name</td>
83
+ <td><input type="text" name="first_name" /></td>
84
+ </tr>
85
+ <tr>
86
+ <td>Gender</td>
87
+ <td>
88
+ M: <input type="radio" name="gender" value="male" /><br />
89
+ F: <input type="radio" name="gender" value="female" /><br />
90
+ </td>
91
+ </tr>
92
+ <tr>
93
+ <td>Check this if you are cool:</td>
94
+ <td><input type="checkbox" name="cool person" /></td>
95
+ </tr>
96
+ <tr>
97
+ <td>Check this if you like ham:</td>
98
+ <td><input type="checkbox" name="likes ham" /></td>
99
+ </tr>
100
+ </table><br />
101
+ <input type="submit" value="Submit" />
102
+ </form>
103
+
104
+ <!-- forms with parameters in the action -->
105
+ <form name="post_form3" method="post" action="/form_post?great day=yes&one=two">
106
+ <table>
107
+ <tr>
108
+ <td>First Name</td>
109
+ <td><input type="text" name="first_name" /></td>
110
+ </tr>
111
+ <tr>
112
+ <td>Gender</td>
113
+ <td>
114
+ M: <input type="radio" name="gender" value="male" /><br />
115
+ F: <input type="radio" name="gender" value="female" /><br />
116
+ </td>
117
+ </tr>
118
+ <tr>
119
+ <td>Check this if you are cool:</td>
120
+ <td><input type="checkbox" name="cool person" /></td>
121
+ </tr>
122
+ <tr>
123
+ <td>Check this if you like ham:</td>
124
+ <td><input type="checkbox" name="likes ham" /></td>
125
+ </tr>
126
+ </table><br />
127
+ <input type="submit" value="Submit" />
128
+ </form>
129
+ <form name="get_form3" method="get" action="/form_post?great day=yes&one=two">
130
+ <table>
131
+ <tr>
132
+ <td>First Name</td>
133
+ <td><input type="text" name="first_name" /></td>
134
+ </tr>
135
+ <tr>
136
+ <td>Gender</td>
137
+ <td>
138
+ M: <input type="radio" name="gender" value="male" /><br />
139
+ F: <input type="radio" name="gender" value="female" /><br />
140
+ </td>
141
+ </tr>
142
+ <tr>
143
+ <td>Check this if you are cool:</td>
144
+ <td><input type="checkbox" name="cool person" /></td>
145
+ </tr>
146
+ <tr>
147
+ <td>Check this if you like ham:</td>
148
+ <td><input type="checkbox" name="likes ham" /></td>
149
+ </tr>
150
+ </table><br />
151
+ <input type="submit" value="Submit" />
152
+ </form>
153
+ </body>
154
+ </html>
@@ -0,0 +1,13 @@
1
+ <html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><title>Google</title><style><!--
2
+ body,td,a,p,.h{font-family:arial,sans-serif;}
3
+ .h{font-size: 20px;}
4
+ .q{color:#0000cc;}
5
+ //-->
6
+ </style>
7
+ <script>
8
+ <!--
9
+ function sf(){document.f.q.focus();}
10
+ // -->
11
+ </script>
12
+ </head><body bgcolor=#ffffff text=#000000 link=#0000cc vlink=#551a8b alink=#ff0000 onLoad=sf() topmargin=3 marginheight=3><center><table border=0 cellspacing=0 cellpadding=0 width=100%><tr><td align=right nowrap><font size=-1><a href="/url?sa=p&pref=ig&pval=2&q=http://www.google.com/ig%3Fhl%3Den">Personalized Home</a>&nbsp;|&nbsp;<a href="https://www.google.com/accounts/Login?continue=http://www.google.com/&hl=en">Sign in</a></font></td></tr><tr height=4><td><img alt="" width=1 height=1></td></tr></table><img src="/intl/en/images/logo.gif" width=276 height=110 alt="Google"><br><br>
13
+ <form action=/search name=f><table border=0 cellspacing=0 cellpadding=4><tr><td nowrap><font size=-1><b>Web</b>&nbsp;&nbsp;&nbsp;&nbsp;<a id=1a class=q href="/imghp?hl=en&tab=wi&ie=UTF-8">Images</a>&nbsp;&nbsp;&nbsp;&nbsp;<a id=2a class=q href="http://groups.google.com/grphp?hl=en&tab=wg&ie=UTF-8">Groups</a>&nbsp;&nbsp;&nbsp;&nbsp;<a id=4a class=q href="http://news.google.com/nwshp?hl=en&tab=wn&ie=UTF-8">News</a>&nbsp;&nbsp;&nbsp;&nbsp;<a id=5a class=q href="http://froogle.google.com/frghp?hl=en&tab=wf&ie=UTF-8">Froogle</a>&nbsp;&nbsp;&nbsp;&nbsp;<a id=7a class=q href="/lochp?hl=en&tab=wl&ie=UTF-8">Local</a>&nbsp;&nbsp;&nbsp;&nbsp;<b><a href="/intl/en/options/" class=q>more&nbsp;&raquo;</a></b></font></td></tr></table><table cellspacing=0 cellpadding=0><tr><td width=25%>&nbsp;</td><td align=center><input type=hidden name=hl value=en><input type=hidden name=ie value="ISO-8859-1"><input maxlength=2048 size=55 name=q value="" title="Google Search"><br><input type=submit value="Google Search" name=btnG><input type=submit value="I'm Feeling Lucky" name=btnI></td><td valign=top nowrap width=25%><font size=-2>&nbsp;&nbsp;<a href=/advanced_search?hl=en>Advanced Search</a><br>&nbsp;&nbsp;<a href=/preferences?hl=en>Preferences</a><br>&nbsp;&nbsp;<a href=/language_tools?hl=en>Language Tools</a></font></td></tr></table></form><br><br><font size=-1><a href="/ads/">Advertising&nbsp;Programs</a> - <a href=/services/>Business Solutions</a> - <a href=/intl/en/about.html>About Google</a></font><p><font size=-2>&copy;2006 Google</font></p></center></body></html>
@@ -0,0 +1,6 @@
1
+ <html>
2
+ <head><title>Page Title</title></head>
3
+ <body>
4
+ <h1>Hello World!</h1>
5
+ </body>
6
+ </html>
@@ -0,0 +1,19 @@
1
+ require 'webrick'
2
+ require 'servlets'
3
+
4
+ s = WEBrick::HTTPServer.new(
5
+ :Port => 2000,
6
+ :DocumentRoot => Dir::pwd + "/htdocs"
7
+ )
8
+ s.mount("/one_cookie", OneCookieTest)
9
+ s.mount("/many_cookies", ManyCookiesTest)
10
+ s.mount("/many_cookies_as_string", ManyCookiesAsStringTest)
11
+ s.mount("/send_cookies", SendCookiesTest)
12
+ s.mount("/form_post", FormTest)
13
+ s.mount("/form post", FormTest)
14
+ s.mount("/response_code", ResponseCodeTest)
15
+
16
+ trap("INT") { s.stop }
17
+
18
+ s.start
19
+
@@ -0,0 +1,130 @@
1
+ require 'webrick'
2
+ require 'logger'
3
+ require 'date'
4
+
5
+ class ResponseCodeTest < WEBrick::HTTPServlet::AbstractServlet
6
+ def do_GET(req, res)
7
+ res['Content-Type'] = "text/html"
8
+ if req.query['code']
9
+ code = req.query['code'].to_i
10
+ case code
11
+ when 301
12
+ res['Location'] = "/index.html"
13
+ when 302
14
+ res['Location'] = "/index.html"
15
+ end
16
+ res.status = code
17
+ else
18
+ end
19
+ end
20
+ end
21
+ class FormTest < WEBrick::HTTPServlet::AbstractServlet
22
+ def do_GET(req, res)
23
+ res.body = "<HTML><body>"
24
+ req.query.each_key { |k|
25
+ res.body << "<a href=\"#\">#{k}:#{req.query[k]}</a><br />"
26
+ }
27
+ res.body << "</body></HTML>"
28
+ res['Content-Type'] = "text/html"
29
+ end
30
+
31
+ def do_POST(req, res)
32
+ res.body = "<HTML><body>"
33
+ req.query.each_key { |k|
34
+ res.body << "<a href=\"#\">#{k}:#{req.query[k]}</a><br />"
35
+ }
36
+ res.body << "</body></HTML>"
37
+ res['Content-Type'] = "text/html"
38
+ end
39
+ end
40
+
41
+ class OneCookieTest < WEBrick::HTTPServlet::AbstractServlet
42
+ def do_GET(req, res)
43
+ cookie = WEBrick::Cookie.new("foo", "bar")
44
+ cookie.path = "/"
45
+ cookie.expires = Time.now + 86400
46
+ res.cookies << cookie
47
+ res['Content-Type'] = "text/html"
48
+ res.body = "<html><body>hello</body></html>"
49
+ end
50
+ end
51
+
52
+ class ManyCookiesTest < WEBrick::HTTPServlet::AbstractServlet
53
+ def do_GET(req, res)
54
+ name_cookie = WEBrick::Cookie.new("name", "Aaron")
55
+ name_cookie.path = "/"
56
+ name_cookie.expires = Time.now + 86400
57
+ res.cookies << name_cookie
58
+ res.cookies << name_cookie
59
+ res.cookies << name_cookie
60
+ res.cookies << name_cookie
61
+
62
+ expired_cookie = WEBrick::Cookie.new("expired", "doh")
63
+ expired_cookie.path = "/"
64
+ expired_cookie.expires = Time.now - 86400
65
+ res.cookies << expired_cookie
66
+
67
+ different_path_cookie = WEBrick::Cookie.new("a_path", "some_path")
68
+ different_path_cookie.path = "/some_path"
69
+ different_path_cookie.expires = Time.now + 86400
70
+ res.cookies << different_path_cookie
71
+
72
+ no_path_cookie = WEBrick::Cookie.new("no_path", "no_path")
73
+ no_path_cookie.expires = Time.now + 86400
74
+ res.cookies << no_path_cookie
75
+
76
+ no_exp_path_cookie = WEBrick::Cookie.new("no_expires", "nope")
77
+ no_exp_path_cookie.path = "/"
78
+ res.cookies << no_exp_path_cookie
79
+
80
+ res['Content-Type'] = "text/html"
81
+ res.body = "<html><body>hello</body></html>"
82
+ end
83
+ end
84
+
85
+ class ManyCookiesAsStringTest < WEBrick::HTTPServlet::AbstractServlet
86
+ def do_GET(req, res)
87
+ cookies = []
88
+ name_cookie = WEBrick::Cookie.new("name", "Aaron")
89
+ name_cookie.path = "/"
90
+ name_cookie.expires = Time.now + 86400
91
+ cookies << name_cookie
92
+ cookies << name_cookie
93
+ cookies << name_cookie
94
+ cookies << name_cookie
95
+
96
+ expired_cookie = WEBrick::Cookie.new("expired", "doh")
97
+ expired_cookie.path = "/"
98
+ expired_cookie.expires = Time.now - 86400
99
+ cookies << expired_cookie
100
+
101
+ different_path_cookie = WEBrick::Cookie.new("a_path", "some_path")
102
+ different_path_cookie.path = "/some_path"
103
+ different_path_cookie.expires = Time.now + 86400
104
+ cookies << different_path_cookie
105
+
106
+ no_path_cookie = WEBrick::Cookie.new("no_path", "no_path")
107
+ no_path_cookie.expires = Time.now + 86400
108
+ cookies << no_path_cookie
109
+
110
+ no_exp_path_cookie = WEBrick::Cookie.new("no_expires", "nope")
111
+ no_exp_path_cookie.path = "/"
112
+ cookies << no_exp_path_cookie
113
+
114
+ res['Set-Cookie'] = cookies.join(', ')
115
+
116
+ res['Content-Type'] = "text/html"
117
+ res.body = "<html><body>hello</body></html>"
118
+ end
119
+ end
120
+
121
+ class SendCookiesTest < WEBrick::HTTPServlet::AbstractServlet
122
+ def do_GET(req, res)
123
+ res['Content-Type'] = "text/html"
124
+ res.body = "<html><body>"
125
+ req.cookies.each { |c|
126
+ res.body << "<a href=\"#\">#{c.name}:#{c.value}</a>"
127
+ }
128
+ res.body << "</body></html>"
129
+ end
130
+ end