输入规格
每行一个待解析的URL字符串,整行读入,处理到EOF为止。
输出规格
对每个URL,以JSON格式输出解析结果:
{
"scheme": "",
"authority": {
"user": "",
"host": "",
"port": 0,
},
"path": "",
"query": {},
"fragment": ""
}
每级缩进为2个空格。
如某个成分不存在,对应的值输出null。如成分存在但为空,输出空串。
端口特殊处理:按整数输出,不加引号。如未指定则输出默认端口。
authority为空时值设为null。
query
如不存在(没有?部分)输出null
如存在,根据&拆分成多个键值对,再根据=取出键和值。
如存在但没有值,输出{}
fragment
如不存在(没有#部分)输出null
如存在,值为#后的部分(可能为空串)。
样例输入
http://admin@127.0.0.1:9999/manual/search.php?target=print&limit=10#view=fit&row=5
https://gitee.com/codearhat/cpplab.git?#
ftp://guest@127.0.0.1:2121/pub/rfc3986.txt
样例输出
{
"raw_url": "http://admin@127.0.0.1:9999/manual/search.php?target=print&limit=10#view=fit&row=5",
"scheme": "http",
"authority": {
"user": "admin",
"host": "127.0.0.1",
"port": 9999
},
"path": "/manual/search.php",
"query": {
"target": "print",
"limit": "10"
},
"fragment": "view=fit&row=5"
}
{
"raw_url": "https://gitee.com/codearhat/cpplab.git?#%22,
"scheme": "https",
"authority": {
"user": null,
"host": "gitee.com",
"port": 443
},
"path": "/codearhat/cpplab.git",
"query": {},
"fragment": ""
}
{
"raw_url": "ftp://guest@127.0.0.1:2121/pub/rfc3986.txt",
"scheme": "ftp",
"authority": {
"user": "guest",
"host": "127.0.0.1",
"port": 2121
},
"path": "/pub/rfc3986.txt",
"query": null,
"fragment": null
}
样例解释
第1组:成分齐全。
第2组:有认证部分,但没用户名,补充默认端口。query和fragment部分存在,内容为空,输出空对象和空串。
第3组:没有query或fragment部分。