tap-http 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History +12 -0
- data/README +9 -70
- data/controllers/capture_controller.rb +55 -0
- data/lib/tap/http/get.rb +19 -0
- data/lib/tap/http/request.rb +263 -0
- data/lib/tap/http/submit.rb +31 -0
- data/lib/tap/test/http_test.rb +36 -121
- data/views/capture_controller/index.erb +30 -0
- metadata +17 -7
- data/cgi/echo.rb +0 -24
- data/cgi/http_to_yaml.rb +0 -108
- data/cgi/parse_http.rb +0 -129
- data/lib/tap/http/dispatch.rb +0 -411
- data/lib/tap/test/http_test/requests.rb +0 -194
@@ -0,0 +1,30 @@
|
|
1
|
+
<p>
|
2
|
+
This is a tutorial for capturing http requests for modification and/or
|
3
|
+
resubmission at a later date. First, get the environment right:
|
4
|
+
</p>
|
5
|
+
|
6
|
+
<ul>
|
7
|
+
<li>Be sure you're viewing this in <a href="http://www.mozilla.com/en-US/firefox/">Firefox</a></li>
|
8
|
+
<li>Install <a href="http://labs.mozilla.com/2008/08/introducing-ubiquity/">Ubiquity</a></li>
|
9
|
+
<li>Subscribe to the <a href="http://gist.github.com/25932">redirect-http</a> command</li>
|
10
|
+
</ul>
|
11
|
+
|
12
|
+
<p>
|
13
|
+
Now capture the request from this page (use the same procedure wherever
|
14
|
+
else you need to capture the parameters of a form):
|
15
|
+
</p>
|
16
|
+
|
17
|
+
<ul>
|
18
|
+
<li>Bring up Ubiquity in Firefox by pressing 'option+space'</li>
|
19
|
+
<li>Enter the command: redirect-http http://localhost:8080/capture/http_to_yaml</li>
|
20
|
+
</ul>
|
21
|
+
|
22
|
+
<p>
|
23
|
+
You should now see some notification that you're redirecting this page.
|
24
|
+
Write what you want to say, hit submit, then follow the instructions.
|
25
|
+
</p>
|
26
|
+
|
27
|
+
<form action='say'>
|
28
|
+
What you want to say: <input name='words' />
|
29
|
+
<input type="submit" value="submit">
|
30
|
+
</form>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tap-http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Chiang
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-02-
|
12
|
+
date: 2009-02-19 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -22,6 +22,16 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 0.12.0
|
24
24
|
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rack
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.9.1
|
34
|
+
version:
|
25
35
|
description:
|
26
36
|
email: simon.a.chiang@gmail.com
|
27
37
|
executables: []
|
@@ -33,13 +43,13 @@ extra_rdoc_files:
|
|
33
43
|
- MIT-LICENSE
|
34
44
|
- History
|
35
45
|
files:
|
36
|
-
-
|
37
|
-
-
|
38
|
-
-
|
39
|
-
- lib/tap/http/
|
46
|
+
- controllers/capture_controller.rb
|
47
|
+
- lib/tap/http/get.rb
|
48
|
+
- lib/tap/http/request.rb
|
49
|
+
- lib/tap/http/submit.rb
|
40
50
|
- lib/tap/http/utils.rb
|
41
51
|
- lib/tap/test/http_test.rb
|
42
|
-
-
|
52
|
+
- views/capture_controller/index.erb
|
43
53
|
- tap.yml
|
44
54
|
- README
|
45
55
|
- MIT-LICENSE
|
data/cgi/echo.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
#!/usr/local/bin/ruby
|
2
|
-
|
3
|
-
####################################
|
4
|
-
# Echos back the HTTP header and parameters as YAML.
|
5
|
-
#
|
6
|
-
# Copyright (c) 2008, Regents of the University of Colorado
|
7
|
-
# Developer: Simon Chiang, Biomolecular Structure Program
|
8
|
-
# Homepage: http://hsc-proteomics.ucdenver.edu/hansen_lab
|
9
|
-
#
|
10
|
-
####################################
|
11
|
-
|
12
|
-
require 'cgi'
|
13
|
-
require 'tap/http/utils'
|
14
|
-
|
15
|
-
cgi = CGI.new
|
16
|
-
cgi.out("text/plain") do
|
17
|
-
begin
|
18
|
-
request = Tap::Http::Utils.parse_cgi_request(cgi)
|
19
|
-
request[:headers].to_yaml + request[:params].to_yaml
|
20
|
-
rescue
|
21
|
-
"Error: #{$!.message}\n" +
|
22
|
-
$!.backtrace.join("\n")
|
23
|
-
end
|
24
|
-
end
|
data/cgi/http_to_yaml.rb
DELETED
@@ -1,108 +0,0 @@
|
|
1
|
-
#!/usr/local/bin/ruby
|
2
|
-
|
3
|
-
#################################################
|
4
|
-
#
|
5
|
-
# Echos back redirected HTTP requests as YAML, suitable for use with the Tap::Net::Submit
|
6
|
-
# task. All HTTP parameters and headers are echoed back directly, except for the
|
7
|
-
# '__original_action' parameter which is used in conjuction with the 'Referer' header to
|
8
|
-
# reconstruct the original url of the request. The '__original_action' parameter is not echoed.
|
9
|
-
#
|
10
|
-
# For example:
|
11
|
-
# __original_action Referer echoed url
|
12
|
-
# http://www.example.com?key=value (any) http://www.example.com?key=value
|
13
|
-
# /page http://www.example.com http://www.example.com/page
|
14
|
-
#
|
15
|
-
# Simply drop this script into a cgi directory, and send it a redirected request. See the
|
16
|
-
# RedirectHTTP Firefox extension for a simple way of redirecting requests to this script.
|
17
|
-
#
|
18
|
-
# Developer: Simon Chiang, Biomolecular Structure Program
|
19
|
-
# Homepage: http://tap.rubyforge.org
|
20
|
-
# Licence: MIT-STYLE
|
21
|
-
#
|
22
|
-
# Copyright (c) 2008, Regents of the University of Colorado
|
23
|
-
#
|
24
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
25
|
-
# software and associated documentation files (the "Software"), to deal in the Software
|
26
|
-
# without restriction, including without limitation the rights to use, copy, modify, merge,
|
27
|
-
# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
|
28
|
-
# to whom the Software is furnished to do so, subject to the following conditions:
|
29
|
-
#
|
30
|
-
# The above copyright notice and this permission notice shall be included in all copies or
|
31
|
-
# substantial portions of the Software.
|
32
|
-
#
|
33
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
34
|
-
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
35
|
-
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
36
|
-
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
37
|
-
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
38
|
-
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
39
|
-
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
40
|
-
# OTHER DEALINGS IN THE SOFTWARE.
|
41
|
-
#
|
42
|
-
#################################################
|
43
|
-
|
44
|
-
require 'rubygems'
|
45
|
-
require 'cgi'
|
46
|
-
require 'yaml'
|
47
|
-
require 'net/http'
|
48
|
-
require 'tap/http/utils'
|
49
|
-
|
50
|
-
# included to sort the hash keys
|
51
|
-
class Hash
|
52
|
-
def to_yaml( opts = {} )
|
53
|
-
YAML::quick_emit( object_id, opts ) do |out|
|
54
|
-
out.map( taguri, to_yaml_style ) do |map|
|
55
|
-
sorted_keys = keys
|
56
|
-
sorted_keys = begin
|
57
|
-
sorted_keys.sort
|
58
|
-
rescue
|
59
|
-
sorted_keys.sort_by {|k| k.to_s} rescue sorted_keys
|
60
|
-
end
|
61
|
-
|
62
|
-
sorted_keys.each do |k|
|
63
|
-
map.add( k, fetch(k) )
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
cgi = CGI.new("html3")
|
71
|
-
begin
|
72
|
-
|
73
|
-
#
|
74
|
-
# gather configs
|
75
|
-
#
|
76
|
-
|
77
|
-
config = {}
|
78
|
-
Tap::Http::Utils.parse_cgi_request(cgi).each_pair do |key, value|
|
79
|
-
config[key.to_s] = value
|
80
|
-
end
|
81
|
-
|
82
|
-
original_action = config['params'].delete("__original_action").to_s
|
83
|
-
referer = config['headers']['Referer'].to_s
|
84
|
-
config['url'] = Tap::Http::Utils.determine_url(original_action, referer)
|
85
|
-
config['headers']['Host'] = URI.parse(config['url']).host
|
86
|
-
|
87
|
-
#
|
88
|
-
# format output
|
89
|
-
#
|
90
|
-
|
91
|
-
# help = cgi.a(Tap::Http::Utils::HELP_URL) { "help" }
|
92
|
-
# how_to_get_cookies = cgi.a(Tap::Http::Utils::COOKIES_HELP_URL) { "how to get cookies" }
|
93
|
-
#
|
94
|
-
# If you need cookies, see #{how_to_get_cookies} or the #{help}.
|
95
|
-
|
96
|
-
cgi.out('text/plain') do
|
97
|
-
%Q{# Copy and paste into a configuration file. Multiple configs
|
98
|
-
# can be added to a single file to perform batch submission.
|
99
|
-
- #{config.to_yaml[5..-1].gsub(/\n/, "\n ")}
|
100
|
-
}
|
101
|
-
end
|
102
|
-
|
103
|
-
rescue
|
104
|
-
cgi.out("text/plain") do
|
105
|
-
"Error: #{$!.message}\n" +
|
106
|
-
$!.backtrace.join("\n")
|
107
|
-
end
|
108
|
-
end
|
data/cgi/parse_http.rb
DELETED
@@ -1,129 +0,0 @@
|
|
1
|
-
#!/usr/local/bin/ruby
|
2
|
-
|
3
|
-
#################################################
|
4
|
-
#
|
5
|
-
# Developer: Simon Chiang, Biomolecular Structure Program
|
6
|
-
# Homepage: http://tap.rubyforge.org
|
7
|
-
# Licence: MIT-STYLE
|
8
|
-
#
|
9
|
-
# Copyright (c) 2008, Regents of the University of Colorado
|
10
|
-
#
|
11
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
12
|
-
# software and associated documentation files (the "Software"), to deal in the Software
|
13
|
-
# without restriction, including without limitation the rights to use, copy, modify, merge,
|
14
|
-
# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
|
15
|
-
# to whom the Software is furnished to do so, subject to the following conditions:
|
16
|
-
#
|
17
|
-
# The above copyright notice and this permission notice shall be included in all copies or
|
18
|
-
# substantial portions of the Software.
|
19
|
-
#
|
20
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
21
|
-
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
22
|
-
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
23
|
-
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
24
|
-
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
25
|
-
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
26
|
-
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
27
|
-
# OTHER DEALINGS IN THE SOFTWARE.
|
28
|
-
#
|
29
|
-
#################################################
|
30
|
-
|
31
|
-
require 'rubygems'
|
32
|
-
require 'cgi'
|
33
|
-
require 'tap/http/utils'
|
34
|
-
|
35
|
-
# included to sort the hash keys
|
36
|
-
class Hash
|
37
|
-
def to_yaml( opts = {} )
|
38
|
-
YAML::quick_emit( object_id, opts ) do |out|
|
39
|
-
out.map( taguri, to_yaml_style ) do |map|
|
40
|
-
sorted_keys = keys
|
41
|
-
sorted_keys = begin
|
42
|
-
sorted_keys.sort
|
43
|
-
rescue
|
44
|
-
sorted_keys.sort_by {|k| k.to_s} rescue sorted_keys
|
45
|
-
end
|
46
|
-
|
47
|
-
sorted_keys.each do |k|
|
48
|
-
map.add( k, fetch(k) )
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
cgi = CGI.new("html3")
|
56
|
-
begin
|
57
|
-
|
58
|
-
http_request_key = "http_request"
|
59
|
-
http_request = cgi[http_request_key]
|
60
|
-
http_request = http_request.respond_to?(:read) ? http_request.read : http_request.to_s
|
61
|
-
|
62
|
-
case
|
63
|
-
when http_request.strip.empty?
|
64
|
-
|
65
|
-
cgi.out do
|
66
|
-
cgi.html do
|
67
|
-
cgi.body do %Q{
|
68
|
-
<h1>Parse HTTP Parameters</h1>
|
69
|
-
|
70
|
-
<p>Enter an HTTP request, like the ones you can capture using the
|
71
|
-
<a href='https://addons.mozilla.org/en-US/firefox/addon/3829'>LiveHTTPHeaders</a> addon for
|
72
|
-
<a href='http://www.mozilla.com/en-US/firefox/'>Firefox</a>.
|
73
|
-
</p>
|
74
|
-
|
75
|
-
<form action='' method='post'>
|
76
|
-
<textarea rows='20' cols='60' name='#{http_request_key}'></textarea>
|
77
|
-
<br/>
|
78
|
-
<input type='submit' value='Parse'>
|
79
|
-
</form>
|
80
|
-
|
81
|
-
<p>Note the request must be properly formated. For example:</p>
|
82
|
-
|
83
|
-
<pre>
|
84
|
-
GET / HTTP/1.1
|
85
|
-
Host: tap.rubyforge.org
|
86
|
-
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12
|
87
|
-
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
|
88
|
-
Accept-Language: en-us,en;q=0.5
|
89
|
-
Accept-Encoding: gzip,deflate
|
90
|
-
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
|
91
|
-
Keep-Alive: 300
|
92
|
-
Connection: keep-alive
|
93
|
-
</pre>}
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
else
|
99
|
-
config = {}
|
100
|
-
Tap::Http::Utils.parse_http_request(http_request).each_pair do |key, value|
|
101
|
-
config[key.to_s] = value
|
102
|
-
end
|
103
|
-
|
104
|
-
help = cgi.a(Tap::Http::Utils::HELP_URL) { "help" }
|
105
|
-
how_to_get_cookies = cgi.a(Tap::Http::Utils::COOKIES_HELP_URL) { "how to get cookies" }
|
106
|
-
|
107
|
-
cgi.out do
|
108
|
-
cgi.html do
|
109
|
-
cgi.body do
|
110
|
-
cgi.pre do %Q{
|
111
|
-
# Copy and paste into a configuration file. Multiple configs
|
112
|
-
# can be added to a single file to perform batch submission.
|
113
|
-
#
|
114
|
-
# If you need cookies, see #{how_to_get_cookies} or the #{help}.
|
115
|
-
- #{config.to_yaml[5..-1].gsub(/\n/, "\n ")}
|
116
|
-
}
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
end
|
123
|
-
|
124
|
-
rescue
|
125
|
-
cgi.out("text/plain") do
|
126
|
-
"Error: #{$!.message}\n" +
|
127
|
-
$!.backtrace.join("\n")
|
128
|
-
end
|
129
|
-
end
|