-
Notifications
You must be signed in to change notification settings - Fork 0
/
query.html
200 lines (149 loc) · 6.17 KB
/
query.html
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta name="keywords" content="Yaws"/>
<title>Yaws</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" type="text/css" href="stil.css"/>
<link rel="shortcut icon" href="/icons/yaws_y.gif" type="image/x-icon"/>
</head>
<body>
<div class="logo">
<img src="icons/yaws_head.gif" width="600" alt="YAWS"/>
</div>
<div id="sidebar">
<h4> Yaws </h4>
<div class=""> <a href="index.html" id="index" >Top Page</a> </div>
<div class=""> <a href="configuration.html" id="configuration">Build Config and Run</a></div>
<div class=""> <a href="dynamic.html" id="dynamic" >Dynamic Content</a> </div>
<div class=""> <a href="https://github.com/erlyaws/yaws/releases/" id="download">Download </a> </div>
<div class=""> <a href="contact.html" id="contact">Contact </a> </div>
<div class=""> <a href="doc.html" id="doc">Documentation</a> </div>
<div class=""> <a href="articles.html" id="resources">Articles</a> </div>
<h4> Examples </h4>
<div class=""> <a href="/json_intro.html">AJAX/JSON RPC</a></div>
<div class=""> <a href="/appmods.html">Appmods</a> </div>
<div class=""> <a href="/arg.html">Arg</a> </div>
<div class=""> <a href="/privbind.html">Binding to Privileged Ports</a></div>
<div class=""> <a href="/bindings.html">Bindings</a> </div>
<div class=""> <a href="/cgi.html">CGI</a></div>
<div class=""> <a href="/session.html">Cookie Sessions</a> </div>
<div class=""> <a href="/cookies.html">Cookies</a> </div>
<div class=""> <a href="/dynamic.html">Dynamic Content</a> </div>
<div class=""> <a href="/embed.html">Embedding Yaws</a></div>
<div class=""> <a href="/upload0.html">File Upload</a> </div>
<div class=""> <a href="/form.html">Forms</a> </div>
<div class=""> <a href="/haxe_intro.html">haXe Remoting</a></div>
<div class=""> <a href="/pcookie.html">Persistent Cookies</a> </div>
<div class="choosen"> <a href="/query.html">Query Part of URL</a></div>
<div class=""> <a href="/rebar_release.html">Rebar Releases</a></div>
<div class=""> <a href="/redirect.html">Redirect</a> </div>
<div class=""> <a href="/server_sent_events.html">Server-Sent Events</a> </div>
<div class=""> <a href="/ssi.html">Server Side Includes</a> </div>
<div class=""> <a href="/simple.html">Simple</a> </div>
<div class=""> <a href="/soap_intro.html">SOAP with Yaws</a></div>
<div class=""> <a href="/stream.html">Streaming Data</a> </div>
<div class=""> <a href="/websockets.html">Web Sockets</a> </div>
<a href="/shoppingcart/index.html">Tiny Shopping Cart</a>
<div class=""> <a href="/yapp_intro.html">Yaws Applications (yapps)</a></div>
<div class=""> <a href="/logger_mod.html">Write Your Own Logger</a></div>
<h4> Misc </h4>
<div class=""> <a href="/internals.html">Internals</a> </div>
</div>
<div id="entry">
<h2>The query part of the url</h2>
<p>
A url can have an optional query part. This part is passed in
the A#arg.querydata which is passed as an argument to the
out/1 function.
</p>
<p>We show how to work with the query part of the url through
an example, if we have a URL on the form of
<a href="man.yaws?page=cat">http://yaws.hyber.org/man.yaws?page=cat</a>
a key/value pair is passed to the page.
In the above example, we have key=page and its value "cat".
The code in the page man.yaws, will read these key/value pairs
in the A#arg.querydata and display the man page.</p>
<p>
Assuming a predifined CSS class called box, defined as:</p>
<div class="box">
<pre>
div.box { border: solid; border-width: thin; width: 90%;
background: rgb(211, 211, 211) }
</pre>
</div>
<p>
The following code:</p>
<div class="box">
<pre>
<erl>
result(Status, Msg) ->
[{status, Status},
{ehtml,
{html,[],
{'div',[{class,"man"}],
{pre,[],Msg}}}}].
out(A) ->
try queryvar(A,"page") of
{ok, Page} ->
%% only allow regular chars in Page
case lists:all(fun(C) ->
if
$a =< C, C =< $z ->
true;
$A =< C, C =< $Z ->
true;
C == $_ ->
true;
C == $. ->
true;
true ->
false
end
end, Page) of
true ->
L = os:cmd("env LC_ALL=en_US.ISO-8859-1 man " ++ Page ++ " | col -b -p -x"),
result(200, L);
false ->
result(400, "illegal character detected in query arg")
end;
undefined ->
result(400, "no man page found in query arg")
catch
_:_ ->
result(400, "illegal character detected in query arg")
end.
</erl>
</pre></div>
<p> will display a man page if invoked with a proper key/value
pair in the query part of the URL.</p>
<p> This fairly convenient way of getting at the query (or POST)
is equivalent of the code:</p>
<div class="box">
<pre>
P = yaws_api:parse_query(A),
L = case lists:keysearch(page, 1, P) of
{value, {page, Page}} ->
.....
</pre>
</div>
<p>The querypart of the URL is part as field in the Arg structure.
The function <tt>parse_query/1</tt> parses the raw data into
a key/value list. </p>
<p>The <tt>queryvar(ARG,Key)</tt> function returns the value of the
variable if it is found in the query part of the request. If the variable is not found
or if the variable is unset, the <tt>queryvar(ARG,Key)</tt> function returns <tt>undefined</tt>.
</p>
</div>
<div class="logo">
<img src="/icons/yaws_pb.gif" alt="pbyaws" />
</div>
<p>
<a href="https://validator.w3.org/check?uri=referer"><img
src="https://www.w3.org/Icons/valid-xhtml10"
alt="Valid XHTML 1.0!" height="31" width="88" /></a>
</p>
</body>
</html>