LR scoket来做HTTP协议

直接上代码

1.data.ws

;WSRData 2 1

send buf0

//    "GET /NewIndex.aspx HTTP/1.1\r\n"
//    "Host: www.95504.net\r\n"
//    "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Fi"
//    "refox/35.0\r\n"
//    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
//    "Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3\r\n"
//    "Accept-Encoding: gzip, deflate\r\n"
//    "Referer: http://www.95504.net/NewIndex.aspx\r\n"
//    "Connection: keep-alive\r\n"
//    "Cache-Control: max-age=0\r\n"
//    "\r\n"
// 通过wireshake抓包,然后点击Hypertext protocol-》copy -》bytes-》offset hex,去掉第一列 ,然后将其转为16进制,数字前用\x,eg:\x47\x55
// 然后回复脚本,将send buffer中我们读得懂的copy到data.ws的send buf以便进行参数化

"\x47\x45\x54\x20\x2f\x4e\x65\x77\x49\x6e\x64\x65\x78\x2e\x61\x73"
"\x70\x78\x20\x48\x54\x54\x50\x2f\x31\x2e\x31\x0d\x0a\x48\x6f\x73"
"\x74\x3a\x20\x77\x77\x77\x2e\x39\x35\x35\x30\x34\x2e\x6e\x65\x74"
"\x0d\x0a\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74\x3a\x20\x4d\x6f"
"\x7a\x69\x6c\x6c\x61\x2f\x35\x2e\x30\x20\x28\x57\x69\x6e\x64\x6f"
"\x77\x73\x20\x4e\x54\x20\x36\x2e\x33\x3b\x20\x57\x4f\x57\x36\x34"
"\x3b\x20\x72\x76\x3a\x33\x35\x2e\x30\x29\x20\x47\x65\x63\x6b\x6f"
"\x2f\x32\x30\x31\x30\x30\x31\x30\x31\x20\x46\x69\x72\x65\x66\x6f"
"\x78\x2f\x33\x35\x2e\x30\x0d\x0a\x41\x63\x63\x65\x70\x74\x3a\x20"
"\x74\x65\x78\x74\x2f\x68\x74\x6d\x6c\x2c\x61\x70\x70\x6c\x69\x63"
"\x61\x74\x69\x6f\x6e\x2f\x78\x68\x74\x6d\x6c\x2b\x78\x6d\x6c\x2c"
"\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x2f\x78\x6d\x6c\x3b"
"\x71\x3d\x30\x2e\x39\x2c\x2a\x2f\x2a\x3b\x71\x3d\x30\x2e\x38\x0d"
"\x0a\x41\x63\x63\x65\x70\x74\x2d\x4c\x61\x6e\x67\x75\x61\x67\x65"
"\x3a\x20\x7a\x68\x2d\x63\x6e\x2c\x7a\x68\x3b\x71\x3d\x30\x2e\x38"
"\x2c\x65\x6e\x2d\x75\x73\x3b\x71\x3d\x30\x2e\x35\x2c\x65\x6e\x3b"
"\x71\x3d\x30\x2e\x33\x0d\x0a\x41\x63\x63\x65\x70\x74\x2d\x45\x6e"
"\x63\x6f\x64\x69\x6e\x67\x3a\x20\x67\x7a\x69\x70\x2c\x20\x64\x65"
"\x66\x6c\x61\x74\x65\x0d\x0a\x52\x65\x66\x65\x72\x65\x72\x3a\x20"
"\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x39\x35\x35\x30\x34"
"\x2e\x6e\x65\x74\x2f\x4e\x65\x77\x49\x6e\x64\x65\x78\x2e\x61\x73"
"\x70\x78\x0d\x0a\x43\x6f\x6f\x6b\x69\x65\x3a\x20\x4e\x54\x4b\x46"
"\x5f\x54\x32\x44\x5f\x43\x4c\x49\x45\x4e\x54\x49\x44\x3d\x67\x75"
"\x65\x73\x74\x45\x33\x32\x31\x43\x31\x39\x34\x2d\x45\x34\x33\x34"
"\x2d\x34\x44\x42\x33\x2d\x35\x39\x34\x44\x2d\x38\x31\x30\x45\x33"
"\x32\x30\x39\x42\x45\x33\x31\x3b\x20\x74\x64\x5f\x63\x6f\x6f\x6b"
"\x69\x65\x3d\x31\x38\x34\x34\x36\x37\x34\x34\x30\x37\x32\x37\x30"
"\x30\x37\x38\x32\x32\x32\x36\x3b\x20\x41\x53\x50\x2e\x4e\x45\x54"
"\x5f\x53\x65\x73\x73\x69\x6f\x6e\x49\x64\x3d\x33\x66\x6e\x75\x66"
"\x64\x74\x6e\x71\x72\x6b\x79\x65\x33\x65\x6a\x64\x63\x35\x6f\x6b"
"\x34\x66\x79\x3b\x20\x6e\x54\x61\x6c\x6b\x5f\x43\x41\x43\x48\x45"
"\x5f\x44\x41\x54\x41\x3d\x7b\x75\x69\x64\x3a\x6b\x66\x5f\x39\x31"
"\x30\x33\x5f\x49\x53\x4d\x45\x39\x37\x35\x34\x5f\x67\x75\x65\x73"
"\x74\x45\x33\x32\x31\x43\x31\x39\x34\x2d\x45\x34\x33\x34\x2d\x34"
"\x44\x2c\x74\x69\x64\x3a\x31\x34\x36\x37\x37\x36\x39\x31\x35\x31"
"\x38\x36\x33\x35\x31\x35\x7d\x0d\x0a\x43\x6f\x6e\x6e\x65\x63\x74"
"\x69\x6f\x6e\x3a\x20\x6b\x65\x65\x70\x2d\x61\x6c\x69\x76\x65\x0d"
"\x0a\x43\x61\x63\x68\x65\x2d\x43\x6f\x6e\x74\x72\x6f\x6c\x3a\x20"
"\x6d\x61\x78\x2d\x61\x67\x65\x3d\x30\x0d\x0a\x0d\x0a"



recv buf1 1195
-1

脚本

#include "lrs.h"


Action()
{
     
     int  sendLen;
     int  recvLen;
     char *buf;
   
     lrs_create_socket("socket0","TCP","RemoteHost=125.32.49.72:80",LrsLastArg);
    
    
     //发送包的长度
     lrs_get_buffer_by_name("buf0",&buf,&sendLen);
     lr_output_message("发送包长度=%d",sendLen);

     lr_start_transaction("发送报文");
     lrs_send("socket0","buf0",LrsLastArg);

     lrs_receive("socket0","buf1",LrsLastArg);
     recvLen=lrs_get_last_received_buffer_size("socket0");
     lr_output_message("接收包长度=%d",recvLen);
    
     //有左右边界最后三个参数 1是代表取第几次取到的   0表示从第几位开始取   -1是全取
     lrs_save_searched_string("socket0", LRS_LAST_RECEIVED,"status","LB/BIN=HTTP/1.1","RB/BIN=OK",1,1,-1);
     

     //lr_output_message("状态码=%s",lr_eval_string("<status>"));
    
     lr_output_message("%s",lr_eval_string("<status>"));

     if(atoi(lr_eval_string("<status>"))==200){
           lr_end_transaction("发送报文", LR_PASS);
       }else{
           lr_end_transaction("发送报文", LR_FAIL);
       }

     lr_think_time(2);
     lrs_close_socket("socket0");

    return 0;
}


回放日志中,将send buff 内容拷贝到 data.ws 的send buff 部分,就是上文注释掉的部分。

注意:
     lr_think_time(2);
     lrs_close_socket("socket0");

在scoket时候,close前加上think time(不会放到事务时间内)。

为什么要加 think time?

场景:receive 业务处理时间长,如果不加 think time,可能会造成tcp 协议只发送了ack包,receive业务仍在处理,此时scoket流已关闭,final包发送不出去,这就会造成大量的time wait,所以建议加上think time,具体时间根据业务来。

以上为get请求,post请求的data.ws和get一样,不过在最后一行再加上参数,然后用 ""包围。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值