-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebcurl.rb
130 lines (117 loc) · 1.98 KB
/
webcurl.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
require 'rubygems'
require 'sinatra'
require 'haml'
template :layout do
%{
%html
%head
%style
input.title {width: 800px}
div.content textarea {width: 800px; height: 100px}
div.header textarea {width: 800px; height: 100px}
=yield
}
end
template :index do
%{
%h2.title Web Curl
%form(action="/" method="post")
.title
%span Url:
%br
%input(type="text" name="url" class="title"){:value => @url}
.header
%span Request Header:
%br
%textarea(name="rq_header")= params[:rq_header]
.header
%span Response Header:
%br
%textarea(name="rsp_header")= @header
.content
%span Content:
%br
%textarea= @content
.title
.header
%span Curl cmd:
%br
%textarea= @cmd
%br
%input(type="submit" value="submit")
}
end
template :eval do
%{
%h2.title Eval
%form(action="/eval" method="post")
.content
%span Input:
%br
%textarea(name="input")= @input
%br
.content
%span Output:
%br
%textarea= @output
%br
%input(type="submit" value="submit")
}
end
def parse_header(s)
h = {}
s.split(/\n/).each do |line|
line.strip!
arr = line.sub(/\:\s*/, " ").split(/\s/)
h[arr.first] = arr[1..-1].join
end
str = ""
h.each do |k, v|
str << " -H '#{k}: #{v}'"
end
str
end
def get_url
header = parse_header(params[:rq_header])
cmd = "curl #{header} -i '#{@url}' --compressed"
puts cmd
@cmd = cmd
html = `#{cmd}`
puts html.inspect
arr = html.split(/\r\n\r\n/m)
@header = arr.first
arr.delete_at(0)
@content = arr.join
end
get '/' do
@url = params[:url]
@header = nil
@content = nil
get_url unless @url.nil?
haml :index
end
post '/' do
@url = params[:url]
@header = nil
@content = nil
get_url unless @url.nil?
haml :index
end
get '/header' do
s = ""
request.env.each do |k, v|
s << "#{k}: #{v}\n"
end
s
end
get '/eval' do
@input = nil
@output = nil
haml :eval
end
post '/eval' do
@xx = "xxxxxxxx"
@input = params[:input]
@output = eval(@input)
haml :eval
end