0

我想在此处的请求是特殊功能之前更改参数的名称,但没有任何效果

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);

}

有什么帮助吗?

4

1 回答 1

0

此代码存在多个问题。一方面,您似乎正试图在多个请求之间共享一个变量(“gs_QueryString”)。当多个会话并行执行时,这将导致竞争条件和损坏。

您也对请求中的数据感到困惑。

byte[] 包含任何 POST 或 PUT 正文中的requestBodyBytes字节。GET 没有任何正文字节。

url字符串包含包含任何 QueryString 参数的 URL。所有请求都有一个 url。

如果您尝试更改作为 URL 一部分的 QueryString,请使用:

var gs_QueryString = oSession.url;
oSession.url = ReplaceQueryParameter('username','username1');

...并更新 ReplaceQueryParameter 函数以返回一个值,而不是尝试更新未受保护的共享变量。

于 2013-05-21T22:35:54.883 回答