首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

配置 json 数据库连接,天杀的密码里面有个 @,咋整呢?试了前面加\没能转义成

  •  
  •   sjmcefc2 · 303 天前 · 2780 次点击
    这是一个创建于 303 天前的主题,其中的信息可能已经有所发展或是发生改变。

    "DataSource": "postgres://mmuser:[email protected]@localhost:5432/mattermost?sslmode=disable\u0026connect_timeout=10",

    这种密码 [email protected] 怎么 转义呢

    10 回复  |  直到 2019-02-10 09:32:59 +08:00
        1
    meik2333   303 天前 via Android
    不用转义啊,直接用不行么?
        2
    eslizn   303 天前
    urlencode
        3
    eslizn   303 天前
    这个和 json 没半毛钱关系 这是 uri 的编码问题
        4
    whi147   303 天前 via Android
    base64 编码
        5
    biggray0312   303 天前 via Android
    楼主试试 2 楼说的,url encode
        6
    abcdabcd987   303 天前   ♥ 7
    楼主不妨试试看下面的这两种方法:

    "DataSource": "user=mmuser password='[email protected]' dbname=mattermost sslmode=disable connect_timeout=10"
    "DataSource": "postgres://mmuser:'[email protected]'@localhost:5432/mattermost?sslmode=disable\u0026connect_timeout=10"


    下面附上解题思路:

    1. 从楼主的配置中可以看到一个关键词叫做 mattermost
    2. Google "mattermost" 可以找到 GitHub: https://github.com/mattermost/mattermost-server
    3. 在 GitHub 顶端搜索 DataSource 可以找到建立数据库连接的代码: https://github.com/mattermost/mattermost-server/blob/2ca222033cfd1d10f5e72228356665e4dbe31a55/store/sqlstore/supplier.go#L207
    4. 往上翻可以看到 dbsql 是 "database/sql"
    5. 不是很懂 golang,所以 Google 搜索了一下 "golang database/sql",找到了文档 https://golang.org/pkg/database/sql/#Open
    6. 发现这是在 golang 标准库里面的,但是文档上面说标准库不包含任何驱动,"See https://golang.org/s/sqldrivers for a list of third-party drivers"
    7. 从上面的列表里面可以看到有个 Postgres 的驱动: https://github.com/lib/pq
    8. 从 lib/pq 的 GitHub 可以找到文档 https://godoc.org/github.com/lib/pq
    9. 从 lib/pq 的文档中可以看到使用这个库的办法是导入 "github.com/lib/pq",于是在 mattermost 的 GitHub 里面搜索 "github.com/lib/pq" 可以验证确实用的是这个库 https://github.com/mattermost/mattermost-server/blob/26684716aae02c9bd1ce4dea14f42c6f36f718c8/store/sqlstore/store.go#L8
    10. 从 lib/pq 的文档中可以看到,可以用单引号把值包起来,而且 lib/pq 支持两个格式的 connection string

    不知道能不能成功,楼主加油!
        7
    tinyproxy   303 天前
    URL 不用\转义,有兴趣找找 RFC 看看,没兴趣粘贴下面的代码改改就知道该输入啥了。

    ```python
    #!/usr/bin/env python3
    from urllib.parse import quote_plus
    username = 'foo'
    password = '[email protected]:123'


    url = 'postgres://%s:%[email protected]:PORT' % (quote_plus(username), quote_plus(password))
    print(url)

    ```
        8
    sutra   303 天前
    try this: pg%40most
        9
    sjmcefc2   303 天前
    @abcdabcd987 太棒了。恭喜发财。
        10
    E1n   302 天前 via Android
    @abcdabcd987 优秀。。。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4261 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 27ms · UTC 08:25 · PVG 16:25 · LAX 00:25 · JFK 03:25
    ♥ Do have faith in what you're doing.