10`a` is a [`++cord`](/doc/hoon/library/1#++cord).
20 ++ epur :: url/header parser
21 =< |=(a=cord (rush a auri))
27 ~zod/main=> (epur 'http://127.0.0.1/')
28 [~ [p=[p=%.n q=~ r=[%.n p=.127.0.0.1]] q=[p=~ q=<||>] r=~]]
29 ~zod/main=> (epur 'http://www.google.com/')
30 [~ [p=[p=%.n q=~ r=[%.y p=<|com google www|>]] q=[p=~ q=<||>] r=~]]
31 ~zod/main=> (epur 'https://www.google.com/')
32 [~ [p=[p=%.y q=~ r=[%.y p=<|com google www|>]] q=[p=~ q=<||>] r=~]]
33 ~zod/main=> (epur 'https//www.google.com/')
35 ~zod/main=> (epur 'https://www.google.com:200/')
36 [~ [p=[p=%.y q=[~ 200] r=[%.y p=<|com google www|>]] q=[p=~ q=<||>] r=~]]
37 ~zod/main=> (epur 'https://www.google.com:200/search')
39 [p=[p=%.y q=[~ 200] r=[%.y p=<|com google www|>]] q=[p=~ q=<|search|>] r=~]
41 ~zod/main=> (epur 'https://www.google.com/search')
42 [~ [p=[p=%.y q=~ r=[%.y p=<|com google www|>]] q=[p=~ q=<|search|>] r=~]]
43 ~zod/main=> (epur 'https://www.google.com/search?q=urbit')
45 [ p=[p=%.y q=~ r=[%.y p=<|com google www|>]]
47 r=~[[p='q' q='urbit']]
50 ~zod/main=> (epur 'https://www.google.com/search?q=urb it')
52 ~zod/main=> (epur 'https://www.google.com/search?q=urb%20it')
54 [ p=[p=%.y q=~ r=[%.y p=<|com google www|>]]
56 r=~[[p='q' q='urb it']]
59 ~zod/main=> (epur 'https://www.google.com/search?q=urbit%20escaping%3F')
61 [ p=[p=%.y q=~ r=[%.y p=<|com google www|>]]
63 r=~[[p='q' q='urbit escaping?']]
71Parses a URL path as a [`++pork`]().
81 ++ apat :: 2396 abs_path
83 (ifix [fas ;~(pose fas (easy ~))] (more fas smeg))
88 ~zod/try=> (scan "/foo/mol/lok" apat:epur)
89 [p=~ q=<|foo mol lok|>]
90 ~zod/try=> (scan "/foo/mol/lok.htm" apat:epur)
91 [p=[~ ~.htm] q=<|foo mol lok|>]
113 ?.(=([& /localhost] r.p.a) a a(p.p &))
119 ?+(a ~ %http [~ %|], %https [~ %&])
120 ;~(sfix scem ;~(plug col fas fas))
123 ;~(plug ;~(pose apat (easy *pork)) yque)
129 ~zod/main=> (auri:epur [1 1] "http://127.0.0.1/")
134 [ p=[p=[p=%.n q=~ r=[%.n p=.127.0.0.1]] q=[p=~ q=<||>] r=~]
135 q=[p=[p=1 q=18] q=""]
139 ~zod/main=> (auri:epur [1 1] "http://www.google.com/")
144 [ p=[p=[p=%.n q=~ r=[%.y p=<|com google www|>]] q=[p=~ q=<||>] r=~]
145 q=[p=[p=1 q=23] q=""]
149 ~zod/main=> (auri:epur [1 1] "https://www.google.com/")
154 [ p=[p=[p=%.y q=~ r=[%.y p=<|com google www|>]] q=[p=~ q=<||>] r=~]
155 q=[p=[p=1 q=24] q=""]
159 ~zod/main=> (auri:epur [1 1] "https//www.google.com/")
161 ~zod/main=> (auri:epur [1 1] "https://www.google.com:200/")
163 q=[~ u=[p=[p=[p=%.y q=[~ 200] r=[%.y p=<|com google www|>]] q=[p=~ q=<||>] r=~] q=[p=[p=1 q=28] q=""]]]
165 ~zod/main=> (auri:epur [1 1] "https://www.google.com:200/search")
167 q=[~ u=[p=[p=[p=%.y q=[~ 200] r=[%.y p=<|com google www|>]] q=[p=~ q=<|search|>] r=~] q=[p=[p=1 q=34] q=""]]]
169 ~zod/main=> (auri:epur [1 1] "https://www.google.com/search")
171 q=[~ u=[p=[p=[p=%.y q=~ r=[%.y p=<|com google www|>]] q=[p=~ q=<|search|>] r=~] q=[p=[p=1 q=30] q=""]]]
173 ~zod/main=> (auri:epur [1 1] "https://www.google.com/search?q=urbit")
178 [ p=[p=[p=%.y q=~ r=[%.y p=<|com google www|>]] q=[p=~ q=<|search|>] r=~[[p='q' q='urbit']]]
179 q=[p=[p=1 q=38] q=""]
183 ~zod/main=> (auri:epur [1 1] "https://www.google.com/search?q=urb it")
188 [ p=[p=[p=%.y q=~ r=[%.y p=<|com google www|>]] q=[p=~ q=<|search|>] r=~[[p='q' q='urb']]]
189 q=[p=[p=1 q=36] q=" it"]
193 ~zod/main=> (auri:epur [1 1] "https://www.google.com/search?q=urb%20it")
198 [ p=[p=[p=%.y q=~ r=[%.y p=<|com google www|>]] q=[p=~ q=<|search|>] r=~[[p='q' q='urb it']]]
199 q=[p=[p=1 q=41] q=""]
203 ~zod/main=> (auri:epur [1 1] "https://www.google.com/search?q=urbit%20escaping%3F")
208 [ p=[p=[p=%.y q=~ r=[%.y p=<|com google www|>]] q=[p=~ q=<|search|>] r=~[[p='q' q='urbit escaping?']]]
209 q=[p=[p=1 q=52] q=""]
216HTTP cookies, results in associative list of cord to cord.
228 (most ;~(plug sem ace) ;~(plug toke ;~(pfix tis tosk)))
233 ~zod/try=> (scan "sam=lop" cock:epur)
235 ~zod/try=> (scan "sam=lop; res=\"salo don -keg!mo\"" cock:epur)
236 [['sam' 'lop'] ~[['res' 'salo don -keg!mo']]]
237 ~zod/try=> (scan "sam=lop; res=\"salo don -keg!mo\"; so" cock:epur)
243Domain label: alphanumeric, with `-` allowed in middle.
254 ++ dlab :: 2396 domainlabel
257 ?.(=('-' (rsh 3 (dec (met 3 a)) a)) [~ u=a] ~)
259 ;~(plug aln (star alp))
265 ~zod/try=> (scan "google" dlab:epur)
267 ~zod/try=> (scan "lera2" dlab:epur)
269 ~zod/try=> (scan "gor-tem" dlab:epur)
271 ~zod/try=> (scan "gortem-" dlab:epur)
277One or more query string characters
288 ++ fque (cook crip (plus pquo)) :: normal query field
293 ~zod/try=> (scan "%20" fque:epur)
295 ~zod/try=> (scan "sam" fque:epur)
297 ~zod/try=> (scan "les+tor" fque:epur)
299 ~zod/try=> (scan "sore-%22mek%22" fque:epur)
301 ~zod/try=> (scan "" fque:epur)
307Zero or more query string characters
318 ++ fquu (cook crip (star pquo)) :: optional field
323 ~zod/try=> (scan "%20" fquu:epur)
325 ~zod/try=> (scan "sam" fquu:epur)
327 ~zod/try=> (scan "les+tor" fquu:epur)
329 ~zod/try=> (scan "sore-%22mek%22" fquu:epur)
331 ~zod/try=> (scan "" fquu:epur)
336Single URL path character: literal, `%` escape, subpath delimiter, `:`
348 ++ pcar ;~(pose pure pesc psub col pat) :: 2396 path char
353 ~zod/try=> (scan "a" pcar:epur)
355 ~zod/try=> (scan "ab" pcar:epur)
358 ~zod/try=> (scan "-" pcar:epur)
360 ~zod/try=> (scan "." pcar:epur)
362 ~zod/try=> (scan "%20" pcar:epur)
364 ~zod/try=> (scan "!" pcar:epur)
380 ++ pcok ;~(less bas sem com doq prn) :: cookie char
385 ~zod/try=> (scan "a" pcok:epur)
387 ~zod/try=> (scan "ab" pcok:epur)
390 ~zod/try=> (scan "!" pcok:epur)
392 ~zod/try=> (scan ";" pcok:epur)
398URL `%` escape, by two hex characters.
409 ++ pesc ;~(pfix cen mes) :: 2396 escaped
414 ~zod/try=> `@t`(scan "%22" pesc:epur)
416 ~zod/try=> `@t`(scan "%20" pesc:epur)
432 ++ pold (cold ' ' (just '+')) :: old space code
437 ~zod/try=> `@t`(scan "+" pold:epur)
439 ~zod/try=> `@t`(scan " " pold:epur)
445Irregular query string character.
456 ++ pque ;~(pose pcar fas wut) :: 3986 query char
461 ~zod/try=> `@t`(scan "a" pque:epur)
463 ~zod/try=> `@t`(scan "?" pque:epur)
465 ~zod/try=> `@t`(scan "%20" pque:epur)
467 ~zod/try=> `@t`(scan "+" pque:epur)
472Character in query string key/value
483 ++ pquo ;~(pose pure pesc pold) :: normal query char
488 ~zod/try=> (scan "a" pquo:epur)
490 ~zod/try=> (scan "ab" pquo:epur)
493 ~zod/try=> (scan "%22" pquo:epur)
495 ~zod/try=> (scan "%20" pquo:epur)
497 ~zod/try=> (scan "+" pquo:epur)
513 ++ pure ;~(pose aln hep dot cab sig) :: 2396 unreserved
518 ~zod/try=> (scan "a" pure:epur)
520 ~zod/try=> (scan "%20" pure:epur)
523 ~zod/try=> (scan "." pure:epur)
525 ~zod/try=> (scan "-" pure:epur)
541 ++ psub ;~ pose :: 3986 sub-delims
542 zap buc pam soq pel per
549 ~zod/try=> `@t`(scan "+" psub:epur)
551 ~zod/try=> `@t`(scan "(" psub:epur)
553 ~zod/try=> `@t`(scan "$" psub:epur)
555 ~zod/try=> `@t`(scan "a" psub:epur)
561Character valid in HTTP token
572 ++ ptok ;~ pose :: 2616 token
573 aln zap hax buc cen pam soq tar lus
574 hep dot ket cab tec bar sig
580 ~zod/try=> `tape`(murn =+(a=' ' |-(`tape`?:(=(0x7f a) ~ [a $(a +(a))]))) (curr rush ptok):epur)
581 "!#$%&'*+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz|~"
582 ~zod/try=> `tape`(skim =+(a=' ' |-(`tape`?:(=(0x7f a) ~ [a $(a +(a))]))) |=(a=char ?=(~ (rush a ptok:epur))))
587URI scheme: alphabetic character, followed by any number of
588alphanumeric, `+` `-` or `.`
599 ++ scem :: 2396 scheme
601 ;~(plug alf (star ;~(pose aln lus hep dot)))
607 ~zod/try=> `@t`(scan "http" scem:epur)
609 ~zod/try=> `@t`(scan "https" scem:epur)
611 ~zod/try=> `@t`(scan "chrome-extension" scem:epur)
627 ++ smeg (cook crip (plus pcar)) :: 2396 segment
632 ~zod/try=> (scan "foo" smeg:epur)
634 ~zod/try=> (scan "bar%20baz-bam" smeg:epur)
650 ++ tock (cook crip (plus pcok)) :: 6265 cookie-value
655 ~zod/try=> (rush 'sam' tock:epur)
657 ~zod/try=> (rush 'las!tore' tock:epur)
659 ~zod/try=> (rush '"sop""les"tor' tock:epur)
661 ~zod/try=> (rush '"zemug"' tock:epur)
666Possibly quoted HTTP cookie value
677 ++ tosk ;~(pose tock (ifix [doq doq] tock)) :: 6265 cookie-value
682 ~zod/try=> (rush 'sam' tosk:epur)
684 ~zod/try=> (rush 'las!tore' tosk:epur)
686 ~zod/try=> (rush '"sop""les"tor' tosk:epur)
688 ~zod/try=> (rush '"zemug"' tosk:epur)
704 ++ toke (cook crip (plus ptok)) :: 2616 token
709 ~zod/try=> (rush 'sam' toke:epur)
711 ~zod/try=> (rush 'las!tore' toke:epur)
713 ~zod/try=> (rush 'sop""les"tor' toke:epur)
715 ~zod/try=> (rush '"zemug"' toke:epur)
720Parse ++host and unit `@ui` port.
731 ++ thor :: 2396 host/port
732 %+ cook |*(a=[* *] [+.a -.a])
735 ;~(pose (stag ~ ;~(pfix col dim:ag)) (easy ~))
741 ~zod/try=> (scan "localhost" thor:epur)
742 [~ [%.y i='localhost' t=~]]
743 ~zod/try=> (scan "localhost:8080" thor:epur)
744 [[~ q=8.080] [%.y i='localhost' t=~]]
745 ~zod/try=> (scan "192.168.0.1:8080" thor:epur)
746 [[~ q=8.080] [%.n q=3.232.235.521]]
747 ~zod/try=> (scan "www.google.com" thor:epur)
748 [~ [%.y i='com' t=~['google' 'www']]]
752URI host: dot-separated segments, or IP address.
763 ++ thos :: 2396 host, no local
767 %+ sear :: LL parser weak here
772 ?.(&((gte c 'a') (lte c 'z')) ~ [~ u=b])
776 =+ tod=(ape:ag ted:ab)
778 ;~(plug tod (stun [3 3] ;~(pfix dot tod)))
785 ~zod/try=> (scan "localhost" thos:epur)
786 [%.y i='localhost' t=~]
787 ~zod/try=> (scan "192.168.0.1" thos:epur)
788 [%.n q=3.232.235.521]
789 ~zod/try=> (scan "192.168.0.1:80" thos:epur)
792 ~zod/try=> (scan "www.google.com" thos:epur)
793 [%.y i='com' t=~['google' 'www']]
797Parses query string, or lack thereof. Result type ++quay
808 ++ yque :: query ending
817 ~zod/try=> (scan "?sar=tok" yque:epur)
819 ~zod/try=> (scan "?les=urbit%20sep&met=kam" yque:epur)
820 [['les' 'urbit sep'] ~[['met' 'kam']]]
821 ~zod/try=> (scan "" yque:epur)
826Parse query string after `?`
838 ;~ pose :: proper query
841 ;~(plug fque ;~(pose ;~(pfix tis fquu) (easy '')))
843 %+ cook :: funky query
844 |=(a=tape [[%$ (crip a)] ~])
851 ~zod/try=> (scan "sar=tok" yquy:epur)
853 ~zod/try=> (scan "les=urbit%20sep&met=kam" yquy:epur)
854 [['les' 'urbit sep'] ~[['met' 'kam']]]
855 ~zod/try=> (scan "" yquy:epur)
860Parse ++quri absolute or relative request path
871 ++ zest :: 2616 request-uri
873 (stag %& (cook |=(a=purl a) auri))
874 (stag %| ;~(plug apat yque))
881 ~zod/try=> (scan "http://www.google.com:80/search?q=foo" zest:epur)
882 [%.y p=[p=%.n q=[~ 80] r=[%.y p=<|com google www|>]] q=[p=~ q=<|search|>] r=~[[p='q' q='foo']]]
883 ~zod/try=> (scan "/rel/bat" zest:epur)
884 [%.n [p=~ q=<|rel bat|>] ~]
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list