创建一个包含所有其他 URL 参数的动态 URL 参数
Create a dynamic URL parameter that includes every other URL parameter
我正在尝试创建 a signature for the JW Platform API。它需要一个名为 "api_signature" 的 URL 参数,每个其他 URL 参数的 SHA1 摘要。
我尝试使用 SHA1
摘要动态创建参数,并以 JS Script
作为输入。这是 JS 脚本的基本代码:
function evaluate(context)
{
var request = context.getCurrentRequest()
var params = request.getUrlParameters()
var sbs = ''
for (key of params) {
if (key === 'api_signature')
continue;
if (sbs.length > 0)
sbs += '&'
sbs += encodeURIComponent(key) + '=' + encodeURIComponent(params[key])
}
return sbs + '<API SECRET GOES HERE>'
}
但是我收到警告:
JS Script cannot be used in URL Parameter Value because this creates a self-dependency.
我该如何解决这个问题?
出现这个警告的原因是request.getURLParameters()
需要对请求的所有url个参数求值,包括api_signature
,因此需要调用JS的evaluate方法脚本,从而产生无限递归问题,该问题在第一次迭代时被检测到并被阻止(危险的 url 参数的内容被 ''
替换)。
理论上,可以通过使用 request.getURLParameters(true)
来避免此问题,其中 returns 每个 url 参数的未计算 DynamicString。不过在实践中好像检测的有点太强了,还是会报warning
另一个解决方案是同时使用 request.getURLParametersNames()
和 request.getURLParameterByName(name)
。然而,检测再次过于强烈并发出警告。
理论上,这两种解决方案都应该在不发出警告的情况下工作,我们正在 Paw 3.0.13 中解决此问题。在任何情况下,虽然发出了警告,但脚本仍然可以正常运行。
示例 request.getURLParameters(true)
function evaluate(context)
{
var request = context.getCurrentRequest()
var params = request.getUrlParameters(true)
var sbs = []
for (var key in params) {
if (key === 'api_signature')
continue;
sbs.push(encodeURIComponent(key) + '=' +
encodeURIComponent(params[key].getEvaluatedString()))
}
return sbs.join('&') + '<API SECRET GOES HERE>'
}
带有 request.getURLParametersName()
的示例
function evaluate(context)
{
var request = context.getCurrentRequest()
var params = request.getUrlParametersNames()
var sbs = []
for (var param of params) {
if (param === 'api_signature')
continue;
sbs.push(encodeURIComponent(param) + '=' +
encodeURIComponent(request.getUrlParameterByName(param)))
}
return sbs.join('&') + '<API SECRET GOES HERE>'
}
我正在尝试创建 a signature for the JW Platform API。它需要一个名为 "api_signature" 的 URL 参数,每个其他 URL 参数的 SHA1 摘要。
我尝试使用 SHA1
摘要动态创建参数,并以 JS Script
作为输入。这是 JS 脚本的基本代码:
function evaluate(context)
{
var request = context.getCurrentRequest()
var params = request.getUrlParameters()
var sbs = ''
for (key of params) {
if (key === 'api_signature')
continue;
if (sbs.length > 0)
sbs += '&'
sbs += encodeURIComponent(key) + '=' + encodeURIComponent(params[key])
}
return sbs + '<API SECRET GOES HERE>'
}
但是我收到警告:
JS Script cannot be used in URL Parameter Value because this creates a self-dependency.
我该如何解决这个问题?
出现这个警告的原因是request.getURLParameters()
需要对请求的所有url个参数求值,包括api_signature
,因此需要调用JS的evaluate方法脚本,从而产生无限递归问题,该问题在第一次迭代时被检测到并被阻止(危险的 url 参数的内容被 ''
替换)。
理论上,可以通过使用 request.getURLParameters(true)
来避免此问题,其中 returns 每个 url 参数的未计算 DynamicString。不过在实践中好像检测的有点太强了,还是会报warning
另一个解决方案是同时使用 request.getURLParametersNames()
和 request.getURLParameterByName(name)
。然而,检测再次过于强烈并发出警告。
理论上,这两种解决方案都应该在不发出警告的情况下工作,我们正在 Paw 3.0.13 中解决此问题。在任何情况下,虽然发出了警告,但脚本仍然可以正常运行。
示例 request.getURLParameters(true)
function evaluate(context)
{
var request = context.getCurrentRequest()
var params = request.getUrlParameters(true)
var sbs = []
for (var key in params) {
if (key === 'api_signature')
continue;
sbs.push(encodeURIComponent(key) + '=' +
encodeURIComponent(params[key].getEvaluatedString()))
}
return sbs.join('&') + '<API SECRET GOES HERE>'
}
带有 request.getURLParametersName()
的示例function evaluate(context)
{
var request = context.getCurrentRequest()
var params = request.getUrlParametersNames()
var sbs = []
for (var param of params) {
if (param === 'api_signature')
continue;
sbs.push(encodeURIComponent(param) + '=' +
encodeURIComponent(request.getUrlParameterByName(param)))
}
return sbs.join('&') + '<API SECRET GOES HERE>'
}