URL parser: Difference between revisions

3,685 bytes added ,  6 years ago
no edit summary
No edit summary
Line 1,325:
"Port" -> 8042, "Path" -> {"", "over", "there"},
"Query" -> {"name" -> "ferret"}, "Fragment" -> "nose"|></pre>
 
=={{header|Nim}}==
The uri module provides a parseUri proc...
 
<lang nim>import std/[uri, strformat, strutils]
 
proc printUri(url: string) =
echo url
let res = parseUri(url)
if res.scheme != "":
echo &"\t Scheme: {res.scheme}"
if res.hostname != "":
echo &"\tHostname: {res.hostname}"
if res.username != "":
echo &"\tUsername: {res.username}"
if res.password != "":
echo &"\tPassword: {res.password}"
if res.path != "":
echo &"\t Path: {res.path}"
if res.query != "":
echo &"\t Query: {res.query}"
if res.port != "":
echo &"\t Port: {res.port}"
if res.anchor != "":
echo &"\t Anchor: {res.anchor}"
if res.opaque:
echo &"\t Opaque: {res.opaque}"
 
let urls = @["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",
"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"]
 
for url in urls:
printUri(url)</lang>
{{out}}
<pre>foo://example.com:8042/over/there?name=ferret#nose
Scheme: foo
Hostname: example.com
Path: /over/there
Query: name=ferret
Port: 8042
Anchor: nose
urn:example:animal:ferret:nose
Scheme: urn
Path: example:animal:ferret:nose
Opaque: true
jdbc:mysql://test_user:ouupppssss@localhost:3306/sakila?profileSQL=true
Scheme: jdbc
Path: mysql://test_user:ouupppssss@localhost:3306/sakila
Query: profileSQL=true
Opaque: true
ftp://ftp.is.co.za/rfc/rfc1808.txt
Scheme: ftp
Hostname: ftp.is.co.za
Path: /rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt#header1
Scheme: http
Hostname: www.ietf.org
Path: /rfc/rfc2396.txt
Anchor: header1
ldap://[2001:db8::7]/c=GB?objectClass=one&objectClass=two
Scheme: ldap
Hostname: 2001:db8::7
Path: /c=GB
Query: objectClass=one&objectClass=two
mailto:John.Doe@example.com
Scheme: mailto
Hostname: example.com
Username: John.Doe
Opaque: true
news:comp.infosystems.www.servers.unix
Scheme: news
Path: comp.infosystems.www.servers.unix
Opaque: true
tel:+1-816-555-1212
Scheme: tel
Path: +1-816-555-1212
Opaque: true
telnet://192.0.2.16:80/
Scheme: telnet
Hostname: 192.0.2.16
Path: /
Port: 80
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
Scheme: urn
Path: oasis:names:specification:docbook:dtd:xml:4.1.2
Opaque: true
ssh://alice@example.com
Scheme: ssh
Hostname: example.com
Username: alice
https://bob:pass@example.com/place
Scheme: https
Hostname: example.com
Username: bob
Password: pass
Path: /place
http://example.com/?a=1&b=2+2&c=3&c=4&d=%65%6e%63%6F%64%65%64
Scheme: http
Hostname: example.com
Path: /
Query: a=1&b=2+2&c=3&c=4&d=%65%6e%63%6F%64%65%64</pre>
 
=={{header|Perl}}==
Anonymous user