1function join_url(url, s, query_keys, i) { 2 s = url["scheme"] "://" 3 if (url["user"]) { 4 s = s url["user"] 5 if (url["password"]) { 6 s = s ":" url["password"] 7 } 8 s = s "@" 9 } 10 s = s url["host"] 11 if (url["port"]) { 12 s = s ":" url["port"] 13 } 14 if (url["path"]) { 15 s = s url["path"] 16 } 17 if (url["query"]) { 18 split(url["query"], query_keys) 19 s = s "?" 20 for (i = 1; i <= length(query_keys); i++) { 21 s = s query_keys[i] "=" url["query", query_keys[i]] 22 if (i != length(query_keys)) { 23 s = s ";" 24 } 25 } 26 } 27 if (url["fragment"]) { 28 s = s "#" url["fragment"] 29 } 30 return s 31} 32 33function split_url(url, s, url_scheme, url_fragment, url_query, url_query_parts, i, url_query_part, url_authority, url_auth, url_user, url_host) { 34 delete url 35 # scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment] 36 split(s, url_scheme, "://") 37 url["scheme"] = url_scheme[1] 38 39 split(url_scheme[2], url_fragment, "#") 40 url["fragment"] = url_fragment[2] 41 42 split(url_fragment[1], url_query, "?") 43 44 split(url_query[2], url_query_parts, "&") 45 # url["query"] list of query keys (space separated) 46 # url["query", key] value 47 for (i = 1; i <= length(url_query_parts); i++) { 48 split(url_query_parts[i], url_query_part, "=") 49 url["query"] = url["query"] " " url_query_part[1] 50 url["query", url_query_part[1]] = url_query_part[2] 51 } 52 53 split(url_query[1], url_authority, "/") 54 url["path"] = substr(url_query[1], length(url_authority[1]) + 1) 55 56 split(url_authority[1], url_auth, "@") 57 58 if (length(url_auth) == 2) { 59 split(url_auth[1], url_user, ":") 60 url["user"] = url_user[1] 61 url["password"] = url_user[2] 62 split(url_auth[2], url_host, ":") 63 } else { 64 url["user"] = "" 65 url["password"] = "" 66 split(url_auth[1], url_host, ":") 67 } 68 url["host"] = url_host[1] 69 url["port"] = url_host[2] 70} 71