1)参数化
与HTTP/HTML协议的脚本一样
C语言的函数在此都可以用。常用的:strcmp,strcat
举例,在init()中编写,替换掉data.ws中的报文内容
char str1[]="Accept-"
char str2[]="Language"
strcat(str1,str2)
#lr_output_message("!!!%s!!!",str1)
lr_save_string(str1,"temp")
lr_output_message("!!!%s!!!",lr_eval_string("<temp>"))
报文内容:
"GET / HTTP/1.1\r\n"
"Accrpt: text/html, application/xhtml+xml, */*\r\n"
"<temp>: zh-CN\r\n"
"User-Agent: Mozilla/5.0 (conpatible;MSIE 9.0;Windows NT 6.1;" "VOV64;Trident/5.0)\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"Host: www.baidu.com\r\n"
"Connection: Keep-Alive\r\n"
"\r\n"
2) 关联函数
2.1 /*lrs_save_param将静态或接收到的缓冲区保存到参数中*/
lrs_save_param (char *s_desc, char *buf_desc, char *param_name, int offset, int param_len);
① s_desc:套接字标识符
② buf_desc:缓冲区标识符
③ param_name:存入缓存数据的参数名称
④ offset:被保存到参数中的缓存区偏移量
⑤ param_len:要保存到参数中的字节数
2.2 /*lrs_save_param_ex将用户、静态或接收到的缓冲区保存到参数中*/
lrs_save_param_ex ( char *s_desc, char *type, char *buff, int offset, int length, char *encoding, char *param );
① s_desc表示指定的Socket名称;
② type表示要存储的数据类型,有“user”、“static”、“received”三种,分别代表用户数据(脚本中自己定义的字符串)、静态数据(data.ws中录制的数据)、最后接收的缓冲区数据;
③ buff表示要保存哪个缓冲区的数据。这个参数与type有对应关系,如果type是“user”、“static”两种,则需要指定具体的buffer名称;如果是“received”则可以忽略这个参数;
④ offset表示在buffer中的偏移量;
⑤ length表示要从buffer中保存的字节数;
⑥ encoding表示的是解码方式。对于“user”类型的buffer,需要指定其为ascii或者ebcdic中的一种,NULL值表示默认的格式为ascii。对于“static”与“received”两种类型的buffer,则可以忽略这个参数,使用客户端的原始编码格式来进行解码;
⑦ param表示要保存的参数名称。
演示三种用法:
1. UserBuffer是脚本中自定义的字符串,存储的内容是"AAAAAThis is a userbuffer test!",执行代码:
lrs_save_param_ex("socket0","user",UserBuffer,5,26,NULL,"Param_User");
后将会把第5个字符后的26个字符即“This is a userbuffer test!”保存到Param_User中;
2.如果buf1在data.ws中的内容如下:
recv buf1 38
"Get your command:Hello client!,长度13."
执行代码:
lrs_save_param_ex("socket0","static","buf1",0,30,NULL,"Param_Static");
后,将会把buf1中从0开始的30个字符即“Get your command:Hello client!”保存到参数 Param_Static中。
3.如果lrs_receive最后接收到的数据包内容为“Length=11Successful.AAAAA”,则执行代码:
lrs_save_param_ex("socket0","received",NULL,9,11,NULL,"Param_Received");
后,将会把从"socket0"收到的缓冲区数据中第9个字节后的11个字节即“Successful.”保存到参数Param_Received中。
2.3 /*lrs_save_searched_string将静态或接收到的缓冲区中搜索出现的字符串,将出现字符串的缓冲区部分保存到参数中*/
lrs_save_param (char *s_desc, char *buf_desc, char *param_name, char *left_boundary, char *right_boundary, int ordinal, int offset, int param_len);
① s_desc:套接字标识符
② buf_desc:缓冲区标识符
③ param_name:保存缓冲区数据的参数名称
④ left_boundary:标识要搜索缓冲区部分的左边界的字符串,格式为"LB=XXX"
⑤ right_boundary:标识要搜索缓冲区部分的右边界的字符串,格式为"RB=XXX"
⑥ ordinal:表示从第几次出现的左边界字符串开始搜索,如果指定了左边界则ordinal的值一定大于0,如果没有指定左边界则将ordinal设为-1
⑦ offset:要开始搜索的偏移量。如果指定了左边界则此偏移量相对于左边界计算,否则就从缓冲区的开始计算偏移量
⑧ param_len:要保存到参数中的缓冲区数据字节数。适用于没有指定右边界的情况,如果指定了右边界则设param_len为-1
演示用法:
lrs_save_searched_string("socket1", LRS_LAST_RECEIVED, "Parameter1", "LB/BIN=*", "RB/BIN=#", 2, 0, -1);

浙公网安备 33010602011771号