neturl

这个小型 Lua 库提供了一些函数,用于轻松解析带有查询字符串的 URL 并构建新的 URL。

$ opm get liyo/neturl

一个强大的 Lua URL 解析器和构建器

这个小型 Lua 库提供了一些函数,用于轻松解析带有查询字符串的 URL 并构建新的 URL。

    > url = require "net.url"

查询字符串解析器

该库支持查询字符串中的括号,例如 PHP。这意味着您可以使用括号构建多维表。解析后的查询字符串有一个 tostring() 辅助函数。与 Lua 一样,如果没有指定索引,则从索引 1 开始。

    > query = url.parseQuery("first=abc&a[]=123&a[]=false&b[]=str&c[]=3.5&a[]=last")
    > = query
    a[1]=123&a[2]=false&a[3]=last&b[1]=str&c[1]=3.5&first=abc
    > = query.a[1]
    123

URL 解析器

该库将 URL 转换为 RFC 中描述的元素表:方案、主机、路径等。

    > u = url.parse("http://www.example.com/test/?start=10")
    > = u.scheme
    http
    > = u.host
    www.example.com
    > = u.path
    /test/

URL 规范化

    > = url.parse("http://www.FOO.com:80///foo/../foo/./bar"):normalize()
    http://www.foo.com/foo/bar

URL 解析器

URL 解析遵循 RFC 2396 中提供的示例。

    > = url.parse("http://a/b/c/d;p?q"):resolve("../../g")
    http://a/g

查询字符串构建器

    > u = url.parse("http://www.example.com")
    > u.query.foo = "bar"
    > = u
    http://www.example.com/?foo=bar

    > u:setQuery{ json = true, skip = 100 }
    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

许可证

mit

版本

  • liyo/neturl 0.9.0 作者: liyo
    这个小型 Lua 库提供了一些函数,用于轻松解析带有查询字符串的 URL 并构建新的 URL。 2019-05-31 04:19:00