A linguagem de regras do ESA oferece funções de transformação para manipular e validar valores extraídos de requisições HTTP.
Funções de transformação compatíveis
concat
Concatena strings.
Formato:
concat(String | Integer | Bytes | Array elements):String.Lógica: Une uma lista de valores separados por vírgula em uma única string.
-
Exemplos:
concat("String1"," ","String",2)retorna"String1 String2".concat("/archive",http.request.uri.path)adiciona o segmento de caminho"/archive"ao início do caminho da URI.concat("userid=123&",http.request.uri.query)insira o par chave-valor"userid=123"no início da string de consulta da URI.concat("https://www.example.com",http.request.uri.path)combina um novo nome de host com o caminho da requisição original para gerar uma nova URL.
ends_with
Verifica se uma string termina com uma substring específica.
Formato:
ends_with(source String,substring String):Boolean.-
Lógica:
Retorna
truese asource Stringterminar com asubstring String. Caso contrário, retornafalse.A
source Stringdeve ser um campo. Não use uma string literal. Por exemplo, não escrevaends_with("foo.html",".html").
Exemplo: Se
http.request.uri.pathfor"/welcome.html", entãoends_with(http.request.uri.path,".html")retornarátrue.
lower
Converte uma string para letras minúsculas.
Formato:
lower(String):StringLógica: Converte o valor de string de um campo em minúsculas. Apenas bytes ASCII maiúsculos são convertidos; todos os outros bytes permanecem inalterados.
Exemplo: Se
http.hostfor"WWW.example.com", entãolower(http.host)=="www.example.com"retornarátrue.
regex_replace
Substitui substrings que correspondem a um padrão de expressão regular.
Formato:
regex_replace(source String,regular_expression String,replacement String):String.-
Lógica:
Substitui a primeira substring que corresponde à expressão regular pela string de substituição.
Por padrão, a correspondência diferencia maiúsculas de minúsculas.
Apenas a primeira ocorrência é substituída, mesmo que existam múltiplas correspondências na string de origem.
Para escapar um caractere
$na string de substituição, adicione outro caractere$como prefixo.A string de substituição pode conter referências a grupos de captura da expressão regular no formato
${<NUMBER>}, onde<NUMBER>é o número do grupo de captura. Até oito referências desse tipo são compatíveis, como${1}e${2}.
-
Exemplos:
-
Correspondência e substituição estática de caracteres:
Correspondência de string bem-sucedida:
regex_replace("/animal/cat","/cat$","/dog")=="/animal/dog".-
Se nenhuma correspondência for encontrada, a string de origem permanece inalterada:
Strings diferentes:
regex_replace("/x","^/y$","/z")=="/x".Strings sensíveis a maiúsculas/minúsculas:
regex_replace("/cat","^/CAT$","/dog")=="/cat".
Quando existem múltiplas correspondências, apenas a primeira é substituída:
regex_replace("/a/a","/a","/b")=="/b/a".Escapando o caractere
$na string de substituição:regex_replace("/b","^/b$","/b$$")=="/b$".Uso de grupos de captura na string de substituição:
regex_replace("/foo/a/path","^/foo/([^/]*)/(.*)$","/bar/${2}/${1}")=="/bar/path/a".-
Correspondência e substituição dinâmica de campos:
A string de origem usa um campo dinâmico para recuperar as informações de caminho da requisição do cliente. Este exemplo substitui
/cat/no caminho por/dog/:regex_replace(http.request.uri.path,"/cat/(.*)$","/dog/${1}").Exemplo de substituição complexa: Substitui cada caractere
+no caminho da requisição original pela string%2B:regex_replace(http.request.uri.path, "^([^+]*)\\+([^+]*)\\+(.*)$", "${1}%2B${2}%2B${3}").
Formato:
starts_with(source String,substring String):Boolean-
Lógica:
Retorna
truese asource Stringcomeçar com asubstring String. Caso contrário, retornafalse.A
source Stringdeve ser um campo. Não use uma string literal. Por exemplo, não escrevastarts_with("foo.html",".html").
Exemplo: Se
http.request.uri.pathfor"/welcome.html", entãostarts_with(http.request.uri.path,".html")retornarátrue.Formato:
to_string(Integer | Boolean | IP address):String.Lógica: Retorna a representação em string de um valor
Integer,Booleanou endereçoIP.-
Exemplos:
Se o resultado de
ip.src.asnumfor15169, entãoto_string(ip.src.asnum)retornará"15169".Se o resultado de
sslfortrue, entãoto_string(ssl)retornará"true".Se o resultado de
ip.srcfor192.168.0.1, entãoto_string(ip.src)retornará"192.168.0.1".
Formato:
upper(String):String.Lógica: Converte o valor de string de um campo em maiúsculas. Apenas bytes ASCII minúsculos são convertidos; todos os outros bytes permanecem inalterados.
Exemplo: Se
http.hostfor"www.example.com", entãoupper(http.host)retornará"WWW.EXAMPLE.COM".Formato:
wildcard_replace(source Bytes,wildcard_pattern Bytes,replacement Bytes,flags Bytes optional):String-
Lógica:
Compara a string de origem com um padrão contendo zero ou mais curingas
*, substitui a parte correspondente pela string de substituição e retorna o resultado. A string de substituição pode conter referências a grupos de captura curinga, como${1}e${2}. Até oito referências de substituição são compatíveis.Se não houver correspondência, a função retorna a string de origem original.
O parâmetro
sourcedeve ser um campo, não uma string literal. Todo o valor desourcedeve corresponder ao parâmetrowildcard_pattern— correspondências parciais não são compatíveis.Para insira um caractere
*literal no parâmetrowildcard_pattern, escape-o com\*. Também escape o caractere\com\\. Dois caracteres*não escapados consecutivos, como**, são inválidos e não podem ser usados. Para realizar o escape de caracteres, use a sintaxe de string raw para o parâmetrowildcard_pattern.Para insira um caractere
$literal no parâmetroreplacement, escape-o com$$.Para executar uma correspondência curinga sensível a maiúsculas/minúsculas, defina o parâmetro
flagscomos.Esta função utiliza correspondência preguiçosa — cada
*corresponde à menor string possível.
-
Exemplos:
Se a URI completa for
https://apps.example.com/calendar/admin?expand=true, a expressãowildcard_replace(http.request.full_uri,"https://*.example.com/*/*","https://example.com/${1}/${2}/${3}")retornaráhttps://example.com/apps/calendar/admin?expand=true.Se a URI completa for
https://example.com/applications/app1, a expressãowildcard_replace(http.request.full_uri,"/applications/*","/apps/${1}")retornaráhttps://example.com/applications/app1inalterada, pois o padrão deve corresponder à URI completa. Usehttp.request.uri.pathpara correspondência apenas do caminho.Se o caminho da URI for
/calendar, a expressãowildcard_replace(http.request.uri.path,"/*","/apps/${1}")retornará/apps/calendar.Se o caminho da URI for
/Apps/calendar, a expressãowildcard_replace(http.request.uri.path,"/apps/*","/${1}")retornará/calendar. A correspondência não diferencia maiúsculas de minúsculas por padrão.Se o caminho da URI for
/Apps/calendar, a expressãowildcard_replace(http.request.uri.path,"/apps/*","/${1}","s")retornará/Apps/calendar. O parâmetroflagsestá definido comospara ative a correspondência sensível a maiúsculas/minúsculas. Como o padrão não corresponde ao caminho original da URI, o resultado permanece inalterado.Se o caminho da URI for
/apps/calendar/login, a expressãowildcard_replace(http.request.uri.path,"/apps/*/login","/${1}/login")retornará/calendar/login.
starts_with
Verifica se uma string começa com uma substring específica.
to_string
Converte um valor para sua representação em string.
upper
Converte uma string para letras maiúsculas.
wildcard_replace
Substitui substrings que correspondem a um padrão curinga.
-