neturl
Lua 的 URL 和查询字符串解析器、构建器、规范化器
$ opm get bsiara/neturl
一个强大的 Lua URL 解析器和构建器
这个小型 Lua 库提供了一些函数,可以轻松地解析带有查询字符串的 URL 并构建新的 URL。
url = require "net.url"
URL 解析器
该库将 URL 转换为 RFC 中描述的元素表:方案、主机、路径等。
u = url.parse("http://www.example.com/test/?start=10")
print(u.scheme)
-- http
print(u.host)
-- www.example.com
print(u.path)
-- /test/
URL 规范化
u = url.parse("http://www.FOO.com:80///foo/../foo/./bar"):normalize()
print(u)
-- http://www.foo.com/foo/bar
URL 解析器
URL 解析遵循 RFC 2396 中提供的示例。
u = url.parse("http://a/b/c/d;p?q"):resolve("../../g")
print(u)
-- http://a/g
路径构建器
可以使用 __div
元表或 u.addSegment()
添加路径段。
u = url.parse('http://example.com')
u / 'bands' / 'AC/DC'
print(u)
-- http://example.com/bands/AC%2FDC
模块选项
separator
用于指定查询参数之间使用的分隔符。默认为&
。cumulative_parameters
默认为 false。如果为 true,则具有相同名称的查询参数将存储在表中。legal_in_path
是一个字符表,这些字符在路径组件中不会被 URL 编码。legal_in_query
是一个字符表,这些字符在查询值中不会被 URL 编码。另一方面,查询参数仅支持一小部分合法字符 (-_.
)。query_plus_is_space
默认为 true,因此查询值中的加号将转换为 %20(空格),而不是 %2B(加号)。
如果希望在路径段中保留 +
符号,可以将其添加到路径中合法字符的列表中。例如
url = require "net.url"
url.options.legal_in_path["+"] = true;
查询字符串解析器
该库支持查询字符串中的括号,如 PHP。这意味着您可以使用括号构建多维表。解析后的查询字符串有一个 tostring() 辅助函数。与 Lua 一样,如果未指定索引,则从索引 1 开始。
query = url.parseQuery("first=abc&a[]=123&a[]=false&b[]=str&c[]=3.5&a[]=last")
print(query)
-- a[1]=123&a[2]=false&a[3]=last&b[1]=str&c[1]=3.5&first=abc
print(query.a[1])
-- 123
查询字符串构建器
u = url.parse("http://www.example.com")
u.query.foo = "bar"
print(u)
-- http://www.example.com/?foo=bar
u:setQuery{ json = true, skip = 100 }
print(u)
-- http://www.example.com/?json=true&skip=100
与 luasocket/url.lua 的区别
Luasocket/url.lua 无法正确解析 http://www.example.com?url=net,因为没有路径。
Luasocket/url.lua 无法清理和规范化 URL,例如删除默认端口、端口中的额外零、空授权、大写方案、域名。
Luasocket/url.lua 不会解析查询字符串参数。
Luasocket/url.lua 与 RFC 2396 的兼容性较差,并且会将
http://a/b/c/d;p?q
和:../../../g
解析为http://ag
而不是http://a/g
../../../../g
解析为http://a../g
而不是http://a/g
g;x=1/../y
解析为http://a/b/c/g;x=1/../y
而不是http://a/b/c/y
/./g
解析为http://a/./g
而不是http://a/g
g;x=1/./y
解析为http://a/b/c/g;x=1/./y
而不是http://a/b/c/g;x=1/y
作者
Bertrand Mansion (golgote)
许可证
mit
版本
-
bsiara/neturl 1.1.0Lua 的 URL 和查询字符串解析器、构建器、规范化器 2023-01-23 15:41:45