我想在此处请求之前更改参数名称是特殊功能但没有任何作用
static function ReplaceQueryParameter(sName: String, sValue: String)
{
var re:RegExp;
if (sValue == null) {
re = new RegExp( "(" + sName + "=)(([^&]*)|$)");
var ret = gs_QueryString.replace(re, '');
gs_QueryString = ret;
}
else {
re = new RegExp( "(" + sName + "=)(([^&]*)|$)");
var ret = gs_QueryString.replace(re, "$1" + sValue);
gs_QueryString = ret;
}
}
static function OnBeforeRequest(oSession: Session)
{
gs_QueryString = System.Text.Encoding.UTF8.GetString(oSession.requestBodyBytes);
ReplaceQueryParameter('username','username1');
SetBodyFromQueryString(oSession);
}
任何帮助?
答案 0 :(得分:0)
此代码存在多个问题。首先,看起来你正在尝试跨多个请求共享一个变量(“gs_QueryString”)。由于多个Sessions并行执行,这将导致竞争条件和损坏。
您也对请求中的数据感到困惑。
requestBodyBytes
byte []包含任何POST或PUT正文中的字节。 GET没有任何正文字节。
url
字符串包含包含任何QueryString参数的URL。所有请求都有一个网址。
如果您尝试更改QueryString(URL是URL的一部分),请使用:
var gs_QueryString = oSession.url;
oSession.url = ReplaceQueryParameter('username','username1');
...并更新ReplaceQueryParameter函数以返回值,而不是尝试更新未受保护的共享变量。