55 lines
1.6 KiB
Plaintext
55 lines
1.6 KiB
Plaintext
using Printf, URIParser
|
|
|
|
const FIELDS = names(URI)
|
|
|
|
function detailview(uri::URI, indentlen::Int=4)
|
|
indent = " "^indentlen
|
|
s = String[]
|
|
for f in FIELDS
|
|
d = string(getfield(uri, f))
|
|
!isempty(d) || continue
|
|
f != :port || d != "0" || continue
|
|
push!(s, @sprintf("%s%s: %s", indent, string(f), d))
|
|
end
|
|
join(s, "\n")
|
|
end
|
|
|
|
test = ["foo://example.com:8042/over/there?name=ferret#nose",
|
|
"urn:example:animal:ferret:nose",
|
|
"jdbc:mysql://test_user:ouupppssss@localhost:3306/sakila?profileSQL=true",
|
|
"ftp://ftp.is.co.za/rfc/rfc1808.txt",
|
|
"http://www.ietf.org/rfc/rfc2396.txt#header1",
|
|
"ldap://[2001:db8::7]/c=GB?objectClass=one&objectClass=two",
|
|
"mailto:John.Doe@example.com",
|
|
"news:comp.infosystems.www.servers.unix",
|
|
"tel:+1-816-555-1212",
|
|
"telnet://192.0.2.16:80/",
|
|
"urn:oasis:names:specification:docbook:dtd:xml:4.1.2",
|
|
"This is not a URI!",
|
|
"ssh://alice@example.com",
|
|
"https://bob:pass@example.com/place",
|
|
"http://example.com/?a=1&b=2+2&c=3&c=4&d=%65%6e%63%6F%64%65%64"]
|
|
|
|
isfirst = true
|
|
for st in test
|
|
if isfirst
|
|
isfirst = false
|
|
else
|
|
println()
|
|
end
|
|
println("Attempting to parse\n \"", st, "\" as a URI:")
|
|
uri = try
|
|
URI(st)
|
|
catch
|
|
println("URIParser failed to parse this URI, is it OK?")
|
|
continue
|
|
end
|
|
print("This URI is parsable ")
|
|
if isvalid(uri)
|
|
println("and appears to be valid.")
|
|
else
|
|
println("but may be invalid.")
|
|
end
|
|
println(detailview(uri))
|
|
end
|