halo-theme-sakura icon indicating copy to clipboard operation
halo-theme-sakura copied to clipboard

随机图使用第三方API自定义参数时能否仅使用自定义参数请求api

Open ly-hjbj opened this issue 9 months ago • 3 comments

目前使用的 Sakura 版本?

2.4.3

目前使用的 halo 版本?

2.20.13

网站地址

No response

建议/问题

你好,很喜欢 Sakura 主题,感谢

当我使用其他随机图 api 时,在 第三方API自定义参数 填写数据后,发现实际请求除了填写的参数还有主题默认携带的参数 通常情况在没问题,但是当默认携带的参数跟 自定义参数 重复时会导致 api 接口失效

指定了 第三方API自定义参数 时可以不携带默认参数吗

Image Image

ly-hjbj avatar Jul 24 '25 06:07 ly-hjbj

可以做到,但问题在于,如果不携带默认参数,默认第三方接口返回的图片将会保持固定大小而非根据需求请求特定大小的图片。

LIlGG avatar Jul 24 '25 06:07 LIlGG

当使用者决定使用第三方随机图接口的时候,是不是最终随机图效果也由使用者自行承担?

不知道这样是否可行: a. 主题允许使用第三方随机图接口,但是第三方接口返回的图片需要按照主题的要求返回(固定大小以及当前或未来需要的其他要求) 或者 b. 主题设置只给个随机图要求说明?然后主题不关心随机图是否满足要求,返回的随机图适配效果让使用者自行调整?

ly-hjbj avatar Jul 28 '25 06:07 ly-hjbj

有一个临时解决办法。 就拿你这个 参数 url 重复的问题来举例:

主题有两个可控参数点位: 1: 第三方 API 自定义参数 2: 随机图 API 资源标识变量 *

当把1置空,2保留默认的: postid 现在前端携带的参数为: postid=xxxx&postid=xxxx&type=url&itype=image&th=960

不难发现 随机图 API 资源标识变量 被插入在 默认参数 type 的前面。(事实上就是直接拼接在第一个参数后面) 那么我们现在将 可控参数2 设置为: type=coverUrl&postid 现在前端携带的参数为: postid=xxx&type=coverUrl&postid=xxxx&type=url&itype=image&th=960

这样就实现了在默认的 type 参数前,提前嵌入我们的自定义 type=coverUrl

同理可类推API自定义参数: 设置第三方 API 自定义参数: type=AAAAA 现在前端携带参数为:
postid=xxx&postid=xxx&type=url&itype=image&type=AAAAA&th=960

得到拼接规律: postid=xxx& + "自定义标识变量" + &type=url&itype=image& + "自定义参数" + &th=960

现在就可以根据图床API的要求进行参数覆盖。 如果API对两个同名参数只取后面一个,则通过自定义参数覆盖,如果只取同名第一个,则通过自定义标识变量进行覆盖。

此方法不能解决的是如果图床获取第一个 postid 则没办法覆盖。

Sinon2003 avatar Sep 15 '25 01:09 Sinon2003