本文为您介绍请求判断相关函数的语法、参数、示例和返回值。

server_addr

使用server_addr返回接收了当前请求的服务器地址,函数的详细信息见下表。
项目 描述
语法 server_addr()
参数
示例
s_addr = server_addr()
say(concat('s_addr:', s_addr))
返回值 返回服务器地址,返回值为字符串类型。

server_port

使用server_port返回接收了当前请求的服务器端口,函数的详细信息见下表。
项目 描述
语法 server_port()
参数
示例
s_addr = server_addr()
say(concat('s_addr:', s_addr))
返回值 返回服务器端口,返回值为数字类型。

client_addr

使用client_addr返回客户端IP地址,函数的详细信息见下表。
项目 描述
语法 client_addr()
参数
示例
c_addr = client_addr()
c_port = client_port()
say(concat('c_addr:', c_addr))
say(concat('c_port:', tostring(c_port)))
返回值 返回客户端IP地址,返回值为字符串类型。

client_country

使用client_country返回客户端IP的国家编码,函数的详细信息见下表。
项目 描述
语法 client_country()
参数
示例
c_country = client_country()
c_region = client_region()
c_city = client_city()
c_isp = client_isp()
if c_country {
    say(concat('client_country:', c_country))
}
if c_region {
    say(concat('client_region:', c_region))
}
if c_city {
    say(concat('client_city:', c_city))
}
if c_isp {
    say(concat('client_isp:', c_isp))
}
返回值 返回客户端的国家编码,返回值为字符串类型。国家编码信息,请参见国家编码表

client_region

使用client_region返回客户端的地区编码,函数的详细信息见下表。
项目 描述
语法 client_region()
参数
示例
c_country = client_country()
c_region = client_region()
c_city = client_city()
c_isp = client_isp()
if c_country {
    say(concat('client_country:', c_country))
}
if c_region {
    say(concat('client_region:', c_region))
}
if c_city {
    say(concat('client_city:', c_city))
}
if c_isp {
    say(concat('client_isp:', c_isp))
}
返回值 返回客户端的地区编码,返回值为字符串类型。地区编码信息,请参见地区编码表

client_isp

使用client_isp返回客户端的运营商编码,函数的详细信息见下表。
项目 描述
语法 client_isp()
参数
示例
c_country = client_country()
c_region = client_region()
c_city = client_city()
c_isp = client_isp()
if c_country {
    say(concat('client_country:', c_country))
}
if c_region {
    say(concat('client_region:', c_region))
}
if c_city {
    say(concat('client_city:', c_city))
}
if c_isp {
    say(concat('client_isp:', c_isp))
}
返回值 返回客户端的运营商编码,返回值为字符串类型。
运营商编码如下:
  • 100017:电信
  • 100025:移动
  • 100026:联通

ip_country

使用ip_country返回指定IP的国家编码,函数的详细信息见下表。
项目 描述
语法 ip_country(ipaddr)
参数 ipaddr:点分十进制的IP字符串。
示例
c_country = ip_country('112.10.80.80')
c_region = ip_region('112.10.80.80')
c_city = ip_city('112.10.80.80')
c_isp = ip_isp('112.10.80.80')
if c_country {
    say(concat('ip_country:', c_country))
}
if c_region {
    say(concat('ip_region:', c_region))
}
if c_city {
    say(concat('ip_city:', c_city))
}
if c_isp {
    say(concat('ip_isp:', c_isp))
}
返回值 返回指定IP的国家编码,返回值为字符串类型。国家编码信息,请参见国家编码表

ip_region

使用ip_region返回指定IP的地区(省市)编码,函数的详细信息见下表。
项目 描述
语法 ip_region(ipaddr)
参数 ipaddr:点分十进制的IP字符串。
示例
c_country = ip_country('112.10.80.80')
c_region = ip_region('112.10.80.80')
c_city = ip_city('112.10.80.80')
c_isp = ip_isp('112.10.80.80')
if c_country {
    say(concat('ip_country:', c_country))
}
if c_region {
    say(concat('ip_region:', c_region))
}
if c_city {
    say(concat('ip_city:', c_city))
}
if c_isp {
    say(concat('ip_isp:', c_isp))
}
返回值 返回指定IP的地区(省市)编码,返回值为字符串类型。地区编码信息,请参见地区编码表

ip_isp

使用ip_isp返回指定IP的运营商编码,函数的详细信息见下表。
项目 描述
语法 ip_isp(ipaddr)
参数 ipaddr:点分十进制的IP字符串。
示例
c_country = ip_country('112.10.80.80')
c_region = ip_region('112.10.80.80')
c_city = ip_city('112.10.80.80')
c_isp = ip_isp('112.10.80.80')
if c_country {
    say(concat('ip_country:', c_country))
}
if c_region {
    say(concat('ip_region:', c_region))
}
if c_city {
    say(concat('ip_city:', c_city))
}
if c_isp {
    say(concat('ip_isp:', c_isp))
}
返回值 返回指定IP的运营商编码,返回值为字符串类型。
运营商编码如下:
  • 100017:电信
  • 100025:移动
  • 100026:联通

req_uri

req_uri函数的说明如下:
  • 如果无pattern参数,则返回请求URI,不包含参数部分。
  • 如果有pattern参数,则针对请求URI进行匹配判断。
函数的详细信息见下表。
项目 描述
语法 req_uri([pattern])
参数 pattern:使用该参数进行匹配,支持以下两种模式。
  • 简单匹配:相等判断。默认为简单匹配。
  • 正则匹配:re:前导的正则表达式。
示例
# req_uri
say(concat('req_uri: ', req_uri()))
if req_uri('/path1/path2') {
    say('req_uri: plain match')
}
if req_uri('re:/path[0-9]/path[0-9]') {
    say('req_uri: regex match')
}
返回值
  • 无pattern参数,返回请求URI。返回值为字符串类型。
  • 有pattern参数,返回true,表示匹配成功;返回false,表示匹配失败。
本示例的返回值如下:
请求:/path1/path2?mode=ip   
响应:
req_uri: /path1/path2
req_uri: plain match
req_uri: regex match

req_uri_basename

req_uri_basename函数的说明如下:
  • 如果无pattern参数,则返回请求URI中的文件名部分。
  • 如果有pattern参数,则针对请求URI中的文件名部分进行匹配判断。
文件名部分示例如下:
  • 示例1:对于/document_detail/30360.html,文件名部分为30360。
  • 示例2:对于/M604/guopei_mp4/ZYJY2017BJGL0101/2-1_g.mp4,文件名部分为2-1_g。
  • 示例3:对于/tarball/foo.tar.bz2,文件名部分为foo。
函数的详细信息见下表。
项目 描述
语法 req_uri_basename([pattern])
参数 pattern:使用该参数进行匹配,支持以下两种模式。
  • 简单匹配:相等判断。默认为简单匹配。
  • 正则匹配:re:前导的正则表达式。
示例
# req_uri_basename
basename = req_uri_basename()
say(concat('req_uri_basename: ', basename, ' ', len(basename)))
if req_uri_basename('foo') {
    say('req_uri_basename: plain match')
}
if req_uri_basename('re:^f.*') {
    say('req_uri_basename: regex match')
}
返回值
  • 无pattern参数,返回请求URI中的文件名部分。返回值为字符串类型。
  • 有pattern参数,返回true,表示匹配成功;返回false,表示匹配失败。
本示例的返回值如下:
请求:/path1/path2/foo.tar.bz2
响应:
req_uri_basename: foo 3
req_uri_basename: plain match
req_uri_basename: regex match

req_uri_ext

req_uri_ext函数的说明如下:
  • 如果无pattern参数,则返回请求URI中的扩展名部分。
  • 如果有pattern参数,则针对请求URI中的扩展名部分进行匹配判断。
扩展名部分示例如下:
  • 示例1:对于/document_detail/30360.html,扩展名部分为.html。
  • 示例2:对于/M604/guopei_mp4/ZYJY2017BJGL0101/2-1_g.mp4,扩展名部分为.mp4。
  • 示例3:对于/tarball/foo.tar.bz2,扩展名部分为.tar.bz2。
函数的详细信息见下表。
项目 描述
语法 req_uri_ext([pattern])
参数 pattern:使用该参数进行匹配,支持以下两种模式。
  • 简单匹配:相等判断。默认为简单匹配。
  • 正则匹配:re:前导的正则表达式。
示例
# req_uri_ext
ext = req_uri_ext()
say(concat('req_uri_ext: ', ext, ' ', len(ext)))
if req_uri_ext('.tar.bz2') {
    say('req_uri_ext: plain match')
}
if req_uri_ext('re:\.tar\.bz[0-2]') {
    say('req_uri_ext: regex match')
}
返回值
  • 无pattern参数,返回请求URI中的扩展名部分。返回值为字符串类型。
  • 有pattern参数,返回true,表示匹配成功;返回false,表示匹配失败。
本示例的返回值如下:
请求:/path1/path2/foo.tar.bz2
响应:
req_uri_ext: .tar.bz2 8
req_uri_ext: plain match
req_uri_ext: regex match

req_uri_seg

req_uri_seg函数的说明如下:
  • 使用正斜线(/)对uri进行分隔并返回所有段落。
    • 如果无idx参数,返回所有段落。
    • 如果有idx参数,返回指定索引后的所有段落,包含对应的索引。
  • 段落索引:段落索引从头部递增,依次从左向右。
  • 段落上限:段落上限为128个字符,超出上限的段落会被丢弃。
函数的详细信息见下表。
项目 描述
语法 req_uri_seg([idx])
参数 idx(可选参数):允许指定起始索引。
示例
# req_uri_seg
def echo_each(k, v, u) {
    say(concat(get(u, 'msg'), ' : segs[', k, ']=', v))
}
# fetch all segments
segs = req_uri_seg()
foreach(segs, echo_each, ['msg'='req_uri_seg()'])
# fetch segments from idx 3
segs = req_uri_seg(3)
if get(segs, 3) {
    say(concat('req_uri_seg(3): segs[3]=', get(segs, 3)))
}
if get(segs, 4) {
    say(concat('req_uri_seg(3): segs[4]=', get(segs, 4)))
}
if get(segs, 5) {
    say(concat('req_uri_seg(3): segs[5]=', get(segs, 5)))
}
返回值 返回值为字典类型,包含相应段落。
说明 从返回字典中获取指定索引段落时,必须判断是否为空。
本示例的返回值如下:
请求:/path1/path2/path3/path4?mode=req2
响应:
req_uri_seg() : segs[1]=path1
req_uri_seg() : segs[2]=path2
req_uri_seg() : segs[3]=path3
req_uri_seg() : segs[4]=path4
req_uri_seg(3): segs[3]=path3
req_uri_seg(3): segs[4]=path4

req_uri_arg

使用req_uri_arg默认返回指定参数的值,如果有pattern参数,则对指定参数的值进行匹配判断,函数的详细信息见下表。
项目 描述
语法 req_uri_arg(name, [pattern])
参数
  • name:参数名称。

    参数名称中出现的短划线(-),需要使用下划线(_)替代。例如:X-USER-ID对应为x_user_id。

  • pattern:使用该参数进行匹配,支持以下两种模式。
    • 简单匹配:相等判断。默认为简单匹配。
    • 正则匹配:re:前导的正则表达式。
示例
# req_uri_arg
uid = req_uri_arg('uid')
if uid {
    say(concat('found uid ', uid))
} else {
    say('not found uid')
}
uid_chk = req_uri_arg('uid', '058334')
if uid_chk {
    say('check uid ok. plain mode')
} else {
    say('check uid fail. plain mode')
}
uid_chk = req_uri_arg('uid', 're:[0-9]+')
if uid_chk {
    say('check uid ok. regex mode')
} else {
    say('check uid fail. regex mode')
}
返回值
  • 如果无pattern参数
    • 参数存在:返回name指定参数的字符串值。
    • 参数不存在:返回false。
  • 如果有pattern参数
    • 参数存在:进行匹配,返回true,表示匹配成功;返回false,表示匹配失败。
    • 参数不存在:返回false。
本示例的返回值如下:
请求:/path1/path2/path3/path4?mode=req4&uid
响应:
not found uid
check uid fail. plain mode
check uid fail. regex mode

请求:/path1/path2/path3/path4?mode=req4&uid=
响应:
found uid
check uid fail. plain mode
check uid fail. regex mode

请求:/path1/path2/path3/path4?mode=req4&uid=12345
响应:
found uid 12345
check uid fail. plain mode
check uid ok. regex mode

req_uri_query_string

req_uri_query_string函数的说明如下:
  • 如果无pattern参数,则返回请求中的参数部分(不含?)。
  • 如果有pattern参数,则针对请求中的参数部分进行匹配判断。
函数的详细信息见下表。
项目 描述
语法 req_uri_query_string([pattern])
参数 pattern:使用该参数进行匹配,支持以下两种模式。
  • 简单匹配:相等判断。默认为简单匹配。
  • 正则匹配:re:前导的正则表达式。
示例
# req_uri_query_string
say(concat('req_uri_query_string: ', req_uri_query_string()))
if req_uri_query_string('mode=') {
    say('check uri query string ok. plain mode')
} else {
    say('check uri query string fail. plain mode')
}
if req_uri_query_string('re:mode=[0-9a-z]+') {
    say('check uri query string ok. regex mode')
} else {
    say('check uri query string fail. regex mode')
}
返回值
  • 无pattern参数,返回请求中的参数部分。返回值为字符串类型。
  • 有pattern参数,返回true,表示匹配成功;返回false,表示匹配失败。
本示例的返回值如下:
请求:/path1/path2/path3/path4?mode=req5&token=34Deasd#243
响应:
req_uri_query_string: mode=req5&token=34Deasd
check uri query string fail. plain mode
check uri query string ok. regex mode

req_scheme

req_scheme函数的说明如下:
  • 如果无pattern参数,则返回请求scheme。
  • 如果有pattern参数,则针对请求scheme进行匹配判断。
函数的详细信息见下表。
项目 描述
语法 req_scheme([pattern])
参数 pattern:使用该参数进行匹配,支持以下两种模式。
  • 简单匹配:相等判断。默认为简单匹配。
  • 正则匹配:re:前导的正则表达式。
示例
# req_scheme
say(concat('req_scheme: ', req_scheme()))
if req_scheme('https') {
    say('check scheme ok. plain mode')
} else {
    say('check scheme fail. plain mode')
}
if req_scheme('re:https?') {
    say('check scheme ok. regex mode')
} else {
    say('check scheme fail. regex mode')
}
返回值
  • 无pattern参数,返回请求scheme。返回值为字符串类型。
  • 有pattern参数,返回true,表示匹配成功;返回false,表示匹配失败。
本示例的返回值如下:
请求:http://xx..
req_scheme: http
check scheme fail. plain mode
check scheme ok. regex mode

req_method

req_method函数的说明如下:
  • 如果无pattern参数,则返回请求method。
  • 如果有pattern参数,则针对请求method进行匹配判断。
函数的详细信息见下表。
项目 描述
语法 req_method([pattern])
参数 pattern:使用该参数进行匹配,支持以下两种模式。
  • 简单匹配:相等判断。默认为简单匹配。
  • 正则匹配:re:前导的正则表达式。
示例
# req_method
say(concat('req_method: ', req_method()))
if req_method('GET') {
    say('check method ok. plain mode')
} else {
    say('check method fail. plain mode')
}
if req_method('re:(GET|POST)') {
    say('check method ok. regex mode')
} else {
    say('check method fail. regex mode')
}
返回值
  • 无pattern参数,返回请求method。返回值为字符串类型。
  • 有pattern参数,返回true,表示匹配成功;返回false,表示匹配失败。
本示例的返回值如下:
请求:POST /xxxx/xxx
响应:
req_method: POST
check method fail. plain mode
check method ok. regex mode

req_host

req_host函数的说明如下:
  • 如果无pattern参数,则返回请求头Host的值。
  • 如果有pattern参数,则针对请求头Host的值进行匹配判断。
函数的详细信息见下表。
项目 描述
语法 req_host([pattern])
参数 pattern:使用该参数进行匹配,支持以下两种模式。
  • 简单匹配:相等判断。默认为简单匹配。
  • 正则匹配:re:前导的正则表达式。
示例
# req_host
say(concat('req_host: ', req_host()))
if req_host('x.y.z.com') {
    say('check host ok. plain mode')
} else {
    say('check host fail. plain mode')
}
if req_host('re:.+\.y\.z\.com') {
    say('check host ok. regex mode')
} else {
    say('check host fail. regex mode')
}
返回值
  • 无pattern参数,返回请求头Host的值。返回值为字符串类型。
  • 有pattern参数,返回true,表示匹配成功;返回false,表示匹配失败。
本示例的返回值如下:
请求:Host: x2.y.z.com
响应:
req_host: x2.y.z.com
check host fail. plain mode
check host ok. regex mode

req_user_agent

req_user_agent函数的说明如下:
  • 如果无pattern参数,则返回请求头User-Agent的值。
  • 如果有pattern参数,则针对请求头User-Agent的值进行匹配判断。
函数的详细信息见下表。
项目 描述
语法 req_user_agent([pattern])
参数 pattern:使用该参数进行匹配,支持以下两种模式。
  • 简单匹配:相等判断。默认为简单匹配。
  • 正则匹配:re:前导的正则表达式。
示例
# req_user_agent
say(concat('req_user_agent: ', req_user_agent()))
if req_user_agent('Mozilla') {
    say('check user_agent ok. plain mode')
} else {
    say('check user_agent fail. plain mode')
}
if req_user_agent('re:^Mozilla') {
    say('check user_agent ok. regex mode')
} else {
    say('check user_agent fail. regex mode')
}
返回值
  • 无pattern参数,返回请求头User-Agent的值。返回值为字符串类型。
  • 有pattern参数,返回true,表示匹配成功;返回false,表示匹配失败。
本示例的返回值如下:
请求:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
响应:
req_user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
check user_agent fail. plain mode
check user_agent ok. regex mode

req_referer

req_referer函数的说明如下:
  • 如果无pattern参数,则返回请求头Referer的值。
  • 如果有pattern参数,则针对请求头Referer的值进行匹配判断。
函数的详细信息见下表。
项目 描述
语法 req_referer([pattern])
参数 pattern:使用该参数进行匹配,支持以下两种模式。
  • 简单匹配:相等判断。默认为简单匹配。
  • 正则匹配:re:前导的正则表达式。
示例
# req_referer
say(concat('req_referer: ', req_referer()))
if req_referer('https://foo.bar.cn/******00003') {
    say('check referer ok. plain mode')
} else {
    say('check referer fail. plain mode')
}
if req_referer('re:https://foo\.bar\.cn/\*+[0-9]+') {
    say('check referer ok. regex mode')
} else {
    say('check referer fail. regex mode')
}
返回值
  • 无pattern参数,返回请求头Referer的值。返回值为字符串类型。
  • 有pattern参数,返回true,表示匹配成功;返回false,表示匹配失败。
本示例的返回值如下:
请求:Referer: https://foo.bar.cn/******00003
响应:
req_referer: https://foo.bar.cn/******00003
check referer ok. plain mode
check referer ok. regex mode

req_cookie

使用req_cookie默认返回指定cookie的值,如果有pattern参数,则对指定cookie的值进行匹配判断,函数的详细信息见下表。
项目 描述
语法 req_cookie(name, [pattern])
参数
  • name:cookie名称。

    cookie名称中出现的短划线(-),需要使用下划线(_)替代。例如:X-USER-ID对应为x_user_id。

  • pattern:使用该参数进行匹配,支持以下两种模式。
    • 简单匹配:相等判断。默认为简单匹配。
    • 正则匹配:re:前导的正则表达式。
示例
# req_cookie
uid = req_cookie('uid')
if uid {
    say(concat('found cookie uid ', uid))
} else {
    say('not found cookie uid')
}
uid_chk = req_cookie('uid', '058334')
if uid_chk {
    say('check cookie uid ok. plain mode')
} else {
    say('check cookie uid fail. plain mode')
}
uid_chk = req_cookie('uid', 're:^[0-9]+')
if uid_chk {
    say('check cookie uid ok. regex mode')
} else {
    say('check cookie uid fail. regex mode')
}
返回值
  • 如果无pattern参数
    • 参数存在:返回name指定cookie的字符串值。
    • 参数不存在:返回false。
  • 如果有pattern参数
    • 参数存在:进行匹配,返回true,表示匹配成功;返回false,表示匹配失败。
    • 参数不存在:返回false。
本示例的返回值如下:
请求:Cookie: uid=123456; token=value2
响应:
found cookie uid 123456
check cookie uid fail. plain mode
check cookie uid ok. regex mode

req_first_x_forwarded

req_first_x_forwarded函数的说明如下:
  • 如果无pattern参数,则返回请求头X-Forwarded-For中的第一个地址。
  • 如果有pattern参数,则针对请求头X-Forwarded-For中的第一个地址进行匹配判断。
函数的详细信息见下表。
项目 描述
语法 req_first_x_forwarded_addr([pattern])
参数 pattern:使用该参数进行匹配,支持以下两种模式。
  • 简单匹配:相等判断。默认为简单匹配。
  • 正则匹配:re:前导的正则表达式。
示例
# req_first_x_forwarded
say(concat('req_first_x_forwarded: ', req_first_x_forwarded()))
if req_first_x_forwarded('1.1.1.1') {
    say('check first_x_forwarded ok. plain mode')
} else {
    say('check first_x_forwarded fail. plain mode')
}
if req_first_x_forwarded('re:1.1.1.[0-9]') {
    say('check first_x_forwarded ok. regex mode')
} else {
    say('check first_x_forwarded fail. regex mode')
}
返回值
  • 无pattern参数,返回请求头X-Forwarded-For中的第一个地址。返回值为字符串类型。
  • 有pattern参数,返回true,表示匹配成功;返回false,表示匹配失败。
本示例的返回值如下:
请求:X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3
响应:
req_first_x_forwarded: 1.1.1.1
check first_x_forwarded ok. plain mode
check first_x_forwarded ok. regex mode

req_header

使用req_header默认返回指定请求头的值,如果有pattern参数,则对指定请求头的值进行匹配判断。函数的详细信息见下表。
项目 描述
语法 req_header(name, [pattern])
参数
  • name:请求头名称。

    请求头名称中出现的短划线(-),需要使用下划线(_)替代。例如:X-USER-ID对应为x_user_id。

  • pattern:使用该参数进行匹配,支持以下两种模式。
    • 简单匹配:相等判断。默认为简单匹配。
    • 正则匹配:re:前导的正则表达式。
示例
# req_header
uid = req_header('x_uid')
if uid {
    say(concat('found header x-uid ', uid))
} else {
    say('not found header x-uid')
}
uid_chk = req_header('x_uid', 'es developer')
if uid_chk {
    say('check header x-uid ok. plain mode')
} else {
    say('check header x-uid fail. plain mode')
}
uid_chk = req_header('x_uid', 're:es [a-z]+')
if uid_chk {
    say('check header x-uid ok. regex mode')
} else {
    say('check header x-uid fail. regex mode')
}
返回值
  • 如果无pattern参数
    • 参数存在:返回name指定请求头的字符串值。
    • 参数不存在:返回false。
  • 如果有pattern参数
    • 参数存在:进行匹配,返回true,表示匹配成功;返回false,表示匹配失败。
    • 参数不存在:返回false。
本示例的返回值如下:
请求:X-UID: es developer
响应:
found header x-uid es developer
check header x-uid ok. plain mode
check header x-uid ok. regex mode

req_id

使用req_id获取每个请求唯一的标识(EagleeyeID),用于标识对应的请求。函数的详细信息见下表。
项目 描述
语法 req_id()
参数
示例
# req_id
say(concat('req_id: ', req_id()))
返回值 返回字符串类型的请求ID。本示例的返回值为req_id: 6451c43d15815890089411000e

地区编码表

地区编码 省市 地区编码 省市 地区编码 省市
370000 山东省 450000 广西壮族自治区 310000 上海市
230000 黑龙江省 540000 西藏自治区 440000 广东省
120000 天津市 150000 内蒙古自治区 340000 安徽省
330000 浙江省 530000 云南省 630000 青海省
320000 江苏省 620000 甘肃省 420000 湖北省
410000 河南省 360000 江西省 210000 辽宁省
640000 宁夏回族自治区 110000 北京市 460000 海南省
130000 河北省 510000 四川省 500000 重庆市
610000 陕西省 220000 吉林省 140000 山西省
650000 新疆维吾尔自治区 350000 福建省 430000 湖南省
520000 贵州省 810000 中国香港 820000 中国澳门
710000 中国台湾