【问题标题】:How to use url encoded string in Firebase REST Query using startAT如何使用 startAT 在 Firebase REST 查询中使用 url 编码字符串
【发布时间】:2015-06-23 23:52:39
【问题描述】:

在我们的数据库中,我们有用作 FireBase 键的 URL。
这些键是 url 编码的字符串形式:

http%3A%2F%2Fblog%ZZexample%ZZcom%2F_Test_Blog_2015_06

GET 请求返回空:

curl 'https://mydb.firebaseio.com/publishers/0000014d45a67fa3_4e93b3f/sites/0000014d45b0dc08_20173d1/pages.json?auth=authstringredacted;startAt="http%3A";orderBy="$key";limitToLast=1'

而这会返回一个项目(注意“startat”参数的区别):

curl 'https://mydb.firebaseio.com/publishers/0000014d45a67fa3_4e93b3f/sites/0000014d45b0dc08_20173d1/pages.json?auth=authstringredacted;startAt="http";orderBy="$key";limitToLast=1'

起初我认为这可能是由于查询参数的 url 编码,但使用这些也不起作用:

startAt="http%253A"

startAt="http:";orderBy="$key";limitToLast=1'

我有一个 http 请求客户端,因此它不会对查询参数进行编码,而且它也不起作用。

我知道在 REST 接口上依赖非 url 编码的查询字符串看起来很奇怪,但 Firebase 依赖于查询 arg 值是有效的 JSON。请注意查询 arg 值周围的额外“”。

是否有使查询工作的解决方法?

另一种选择是添加另一个表,将 URL 键映射到不存在编码问题的唯一 ID。

【问题讨论】:

    标签: rest firebase


    【解决方案1】:

    看起来您可以使用双百分比来编码百分比。但是您必须对它们进行 URL 编码,因此不要使用 %% 代替每个 %,而是使用 %25%25

    因此,对于您的示例,此 URL 应该可以解决问题: https://mydb.firebaseio.com/publishers/0000014d45a67fa3_4e93b3f/sites/0000014d45b0dc08_20173d1/pages.json?auth=authstringredacted;startAt="http%25%253A%25%252F%25%252Fblog%25%25ZZexample%25%25ZZcom%25%252F_Test_Blog_2015_06";orderBy="$key";limitToLast=1

    【讨论】:

    • 双重编码有效,感谢内森!我有 urlencod'ed 值进入系统,不得不再次对其进行编码以提取相关的 Firebase 注释。我让用户滥用了一个系统,他们最终导致它无法正常工作,而且效果很好。
    猜你喜欢
    • 1970-01-01
    • 2020-05-19
    • 2022-11-10
    • 2012-02-25
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 2022-01-04
    相关资源
    最近更新 更多