[GH-ISSUE #99] 某次大幅的更新后,传递的URL参数中如果包含大括号{},url就不会进行跳转 #91

Closed
opened 2026-03-03 11:34:07 +03:00 by kerem · 6 comments
Owner

Originally created by @ivanusong on GitHub (May 31, 2021).
Original GitHub issue: https://github.com/Finb/Bark/issues/99

因为项目中有网址+json参数的传递,忘记是哪次ios客户端更新了之后,就不会跳转了,经测试发现是只要传递参数中包含{},就不会跳转,URL编码之后也不行。求解

Originally created by @ivanusong on GitHub (May 31, 2021). Original GitHub issue: https://github.com/Finb/Bark/issues/99 因为项目中有网址+json参数的传递,忘记是哪次ios客户端更新了之后,就不会跳转了,经测试发现是只要传递参数中包含{},就不会跳转,URL编码之后也不行。求解
kerem closed this issue 2026-03-03 11:34:07 +03:00
Author
Owner

@Finb commented on GitHub (May 31, 2021):

我测试是正常的。
需要特别注意URL编码,使整个URL符合规范

例如要传递的URL是

https://www.baidu.com/s?wd={}

URL中的 wd 参数值需要URL编码后,成为一个合法URL

https://www.baidu.com/s?wd=%7B%7D

上面的百度URL当做推送URLurl参数的参数值时,参数值也需要编码。 最后的请求URL应该是这样的

https://api.day.app/yourkey/test?url=https%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3D%257B%257D
<!-- gh-comment-id:851487209 --> @Finb commented on GitHub (May 31, 2021): 我测试是正常的。 需要特别注意URL编码,使整个URL符合规范 例如要传递的URL是 ``` https://www.baidu.com/s?wd={} ``` URL中的 wd 参数值需要URL编码后,成为一个合法URL ``` https://www.baidu.com/s?wd=%7B%7D ``` 上面的`百度URL`当做`推送URL`的`url参数的参数值`时,参数值也需要编码。 最后的请求URL应该是这样的 ``` https://api.day.app/yourkey/test?url=https%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3D%257B%257D ```
Author
Owner

@ivanusong commented on GitHub (May 31, 2021):

https://www.baidu.com/s?wd=%7B%7D

感谢您的测试,按照您给百度链接通过URL编码后是正常的。

但是否是因为我所用的链接并不是 http/https 的标准网址链接,而是 URLscheme ,作用是用来调起其他 APP。
劳烦您测试一下这个 URL ,如果粘贴在浏览器里是会调起京东APP的,但是通过 bark 推送过来就无法自动跳转,但是如果去掉其中的 {} 又可以了,通过 bark 客户端 app 的历史消息来看,传递过来的 url 是被解码过的原始信息。

测试 URL:

openapp.jdmobile://virtual?params={}
<!-- gh-comment-id:851519231 --> @ivanusong commented on GitHub (May 31, 2021): > ``` > https://www.baidu.com/s?wd=%7B%7D > ``` 感谢您的测试,按照您给百度链接通过URL编码后是**正常**的。 但是否是因为我所用的链接并不是 http/https 的标准网址链接,而是 `URLscheme` ,作用是用来调起其他 APP。 劳烦您测试一下这个 URL ,如果粘贴在浏览器里是会调起京东APP的,但是通过 bark 推送过来就无法自动跳转,但是如果去掉其中的 `{}` 又可以了,通过 bark 客户端 app 的历史消息来看,传递过来的 url 是被解码过的原始信息。 测试 URL: ``` openapp.jdmobile://virtual?params={} ```
Author
Owner

@ivanusong commented on GitHub (May 31, 2021):

补充一下,在之前旧的版本时(至少我记得1.1.0版本还是可用的,那时候刚更新了提示音功能),都是正常可以跳转的。

<!-- gh-comment-id:851522298 --> @ivanusong commented on GitHub (May 31, 2021): 补充一下,在之前旧的版本时(至少我记得1.1.0版本还是可用的,那时候刚更新了提示音功能),都是正常可以跳转的。
Author
Owner

@Finb commented on GitHub (May 31, 2021):

这个URL也一样
params参数部分为了符合规范,需要进行URL编码

openapp.jdmobile://virtual?params={"test":"1"}

编码后应该是

openapp.jdmobile://virtual?params=%7B%22test%22%3A%221%22%7D

再对整个URL进行编码,拼接到推送URL

https://api.day.app/yourkey/test?url=openapp.jdmobile%3A%2F%2Fvirtual%3Fparams%3D%257B%2522test%2522%253A%25221%2522%257D

总之就是 URL的参数,需要URL编码。防止参数中的特殊字符破坏URL结构

之前的老版本不遵守URL规范可以解析,但最好还是使用标准URL发送推送。

或者你可以使用POST发送推送请求
或者使用V2接口,使用JSON发送推送请求
https://github.com/Finb/bark-server/blob/master/docs/API_V2.md

<!-- gh-comment-id:851524967 --> @Finb commented on GitHub (May 31, 2021): 这个URL也一样 params参数部分为了符合规范,需要进行URL编码 ``` openapp.jdmobile://virtual?params={"test":"1"} ``` 编码后应该是 ``` openapp.jdmobile://virtual?params=%7B%22test%22%3A%221%22%7D ``` 再对整个URL进行编码,拼接到推送URL ``` https://api.day.app/yourkey/test?url=openapp.jdmobile%3A%2F%2Fvirtual%3Fparams%3D%257B%2522test%2522%253A%25221%2522%257D ``` 总之就是 URL的参数,需要URL编码。防止参数中的特殊字符破坏URL结构 之前的老版本不遵守URL规范可以解析,但最好还是使用标准URL发送推送。 或者你可以使用POST发送推送请求 或者使用V2接口,使用JSON发送推送请求 https://github.com/Finb/bark-server/blob/master/docs/API_V2.md
Author
Owner

@ivanusong commented on GitHub (May 31, 2021):

测试了几条 URL
猜测是否是因为正则匹配是以 http(s) 开头,而不以这开头的信息将自动被完整解码,而以 http(s) 开头的则仅解码 URL 域名部分?

<!-- gh-comment-id:851525616 --> @ivanusong commented on GitHub (May 31, 2021): 测试了几条 URL 猜测是否是因为正则匹配是以 http(s) 开头,而不以这开头的信息将自动被完整解码,而以 http(s) 开头的则仅解码 URL 域名部分?
Author
Owner

@ivanusong commented on GitHub (May 31, 2021):

这个URL也一样
params参数部分为了符合规范,需要进行URL编码

openapp.jdmobile://virtual?params={"test":"1"}

编码后应该是

openapp.jdmobile://virtual?params=%7B%22test%22%3A%221%22%7D

再对整个URL进行编码,拼接到推送URL

https://api.day.app/yourkey/test?url=openapp.jdmobile%3A%2F%2Fvirtual%3Fparams%3D%257B%2522test%2522%253A%25221%2522%257D

总之就是 URL的参数,需要URL编码。防止参数中的特殊字符破坏URL结构

之前的老版本不遵守URL规范可以解析,但最好还是使用标准URL发送推送。

或者你可以使用POST发送推送请求
或者使用V2接口,使用JSON发送推送请求
https://github.com/Finb/bark-server/blob/master/docs/API_V2.md

抱歉。终于明白了,首先对参数进行一次编码,然后对整个 URL 再次编码,其实是两次编码,我真笨。。。

<!-- gh-comment-id:851528565 --> @ivanusong commented on GitHub (May 31, 2021): > 这个URL也一样 > params参数部分为了符合规范,需要进行URL编码 > > ``` > openapp.jdmobile://virtual?params={"test":"1"} > ``` > > 编码后应该是 > > ``` > openapp.jdmobile://virtual?params=%7B%22test%22%3A%221%22%7D > ``` > > 再对整个URL进行编码,拼接到推送URL > > ``` > https://api.day.app/yourkey/test?url=openapp.jdmobile%3A%2F%2Fvirtual%3Fparams%3D%257B%2522test%2522%253A%25221%2522%257D > ``` > > 总之就是 URL的参数,需要URL编码。防止参数中的特殊字符破坏URL结构 > > 之前的老版本不遵守URL规范可以解析,但最好还是使用标准URL发送推送。 > > 或者你可以使用POST发送推送请求 > 或者使用V2接口,使用JSON发送推送请求 > https://github.com/Finb/bark-server/blob/master/docs/API_V2.md 抱歉。终于明白了,首先对参数进行一次编码,然后对整个 URL 再次编码,其实是两次编码,我真笨。。。
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/Bark#91
No description provided.