1. Body:
一般情况下Body中内容是作为字面值进行发送的,Body中也可以发送二进制流(用十六进制表示),方法如下,但仅限二进制流中不含空字符\x00,如果一段Body的二进制流中有空字符,则web_custom_request实际发送的内容为第一个空字符之前的数据,其后的数据(包括空)都会被截断。
例如:
1.1 Body内容不含空字符\x00
1 web_custom_request("web_custom_request",
2 "URL=http://www.baidu.com",
3 "Method=POST",
4 "TargetFrame=",
5 "Resource=0",
6 "Referer=",
7 "Mode=HTTP",
8 "Body=\x3d\x9d\x1d\xef\xa4\x04\x41",
9 LAST);
发送数据包的Body内容为:
1.2 Body内容含空字符\x00
1 web_custom_request("web_custom_request",
2 "URL=http://www.baidu.com",
3 "Method=POST",
4 "TargetFrame=",
5 "Resource=0",
6 "Referer=",
7 "Mode=HTTP",
8 "Body=\x3d\x00\x9d\x1d\xef\xa4\x00\x04\x41",
9 LAST);
发送数据包的Body内容为:
因此使用Body是无法发送含有空的二进制数据流的,此外,Body中的内容可以使用参数替代,web_custom_request函数的整个Body字符串参数("Body=abcd")也是可以使用一个变量(数组或字符指针)来替代的,注意点:1、变量中的内容不需要含有双引号,例如:char BodyVar[20] = "Body=abcd"; 2、使用变量时后面加一个逗号,例如:BodyVar, 。
2. BodyBinary:
当要发送的二进制数据流中含有空时可以使用BodyBinary来发送,注意下面的代码,发送的请求中第一个空之后的数据仍然被截断, 发送数据包的Body内容同1.2中的截图:
1 web_custom_request("web_custom_request",
2 "URL=http://www.baidu.com",
3 "Method=POST",
4 "TargetFrame=",
5 "Resource=0",
6 "Referer=",
7 "Mode=HTTP",
8 "BodyBinary=\x3d\x00\x9d\x1d\xef\xa4\x00\x04\x41\x00\x00\x42",
9 LAST);
正确的写法如下,使用两个转义字符:
1 web_custom_request("web_custom_request",
2 "URL=http://www.baidu.com",
3 "Method=POST",
4 "TargetFrame=",
5 "Resource=0",
6 "Referer=",
7 "Mode=HTTP",
8 "BodyBinary=\\x3d\\x00\\x9d\\x1d\\xef\\xa4\\x00\\x04\\x41\\x00\\x00\\x42",
9 LAST);
也可以如下这样写,只在出现空的地方用两个反斜杠:
1 web_custom_request("web_custom_request",
2 "URL=http://www.baidu.com",
3 "Method=POST",
4 "TargetFrame=",
5 "Resource=0",
6 "Referer=",
7 "Mode=HTTP",
8 "BodyBinary=\x3d\\x00\x9d\x1d\xef\xa4\\x00\x04\x41\\x00\\x00\x42",
9 LAST);
发送数据包的Body内容为:
即二进制数据流中含有空也是可以发送的,上面一栏显示的是八进制表示。BodyBinary中的内容同样可以使用参数替代,整个BodyBinary字符串参数同样可以使用变量替换。如下:
1 char *sendbufhex = "\\x3d\\x00\\x9d\\x1d\\xef\\xa4\\x00\\x04\\x41\\x00\\x00\\x42";
2 lr_save_string(sendbufhex,"sendbufhexParam");
3
4 web_custom_request("web_custom_request",
5 "URL=http://www.baidu.com",
6 "Method=POST",
7 "TargetFrame=",
8 "Resource=0",
9 "Referer=",
10 "Mode=HTTP",
11 "BodyBinary={sendbufhexParam}",
12 LAST);
1 char *sendbufhexBody = "BodyBinary=\\x3d\\x00\\x9d\\x1d\\xef\\xa4\\x00\\x04\\x41\\x00\\x00\\x42";
2
3
4 web_custom_request("web_custom_request",
5 "URL=http://www.baidu.com",
6 "Method=POST",
7 "TargetFrame=",
8 "Resource=0",
9 "Referer=",
10 "Mode=HTTP",
11 sendbufhexBody,
12 LAST);
但是当参数或变量中的内容并不是上面这样直接赋值一个常量字符串,而是通过其他拆分拼接而来时,就只需要使用一个反斜杆,比如:我要发送的的一串二进制流的十六进制字符串为:3d009d1defa4000441000042,参数写法代码如下:
1 char sendbuf[100] ="3d009d1defa4000441000042";
2 char sendbufhex[100];
3 char temp[100];
4 int sendbuflen,i;
5
6 sendbuflen = strlen(sendbuf);
7 memset(sendbufhex,'\0',sizeof(sendbufhex));
8
9 for(i=0;i<sendbuflen;i+=2)
10 {
11 memset(temp,'\0',sizeof(temp));
12 temp[0] = '\\';
13 temp[1] = 'x';
14 temp[2] = sendbuf[i];
15 temp[3] = sendbuf[i+1];
16 lr_output_message("Notify:temp:%s",temp);
17 strcat(sendbufhex,temp);
18 }
19
20 lr_output_message("Notify:sendbufhex:%s",sendbufhex);
21
22 lr_save_string(sendbufhex,"sendbufhexParam");
23
24 lr_output_message("Notify:sendbufhexParam:%s",lr_eval_string("{sendbufhexParam}"));
25
26 web_custom_request("web_custom_request",
27 "URL=http://www.baidu.com",
28 "Method=POST",
29 "TargetFrame=",
30 "Resource=0",
31 "Referer=",
32 "Mode=HTTP",
33 "BodyBinary={sendbufhexParam}",
34 LAST);
特别注意:拼接的参数中只需要一个饭斜杠而不是两个饭斜杠,”3d009d1defa4000441000042" ==》 "\x3d\x00\x9d\x1d\xef\xa4\x00\x04\x41\x00\x00\x42"
变量替换写法代码如下:
1 char sendbuf[100] ="3d009d1defa4000441000042";
2 char sendbufhex[100];
3 char temp[100];
4 int sendbuflen,i;
5 sendbuflen = strlen(sendbuf);
6 lr_output_message("Notify:sendbuflen:%d",sendbuflen);
7
8 memset(sendbufhex,'\0',sizeof(sendbufhex));
9 strcat(sendbufhex,"BodyBinary=");
10
11 for(i=0;i<sendbuflen;i+=2)
12 {
13 memset(temp,'\0',sizeof(temp));
14 temp[0] = '\\';
15 temp[1] = 'x';
16 temp[2] = sendbuf[i];
17 temp[3] = sendbuf[i+1] ;
18 lr_output_message("Notify:temp:%s",temp);
19 strcat(sendbufhex,temp);
20 }
21
22 lr_output_message("Notify:sendbufhex:%s",sendbufhex);
23
24 web_custom_request("web_custom_request",
25 "URL=http://www.baidu.com",
26 "Method=POST",
27 "TargetFrame=",
28 "Resource=0",
29 "Referer=",
30 "Mode=HTTP",
31 sendbufhex,
32 LAST);
3. RAW_BODY
待续...
可用于发送json格式的数据:
1 web_custom_request("request", //随便写个名字
2 "Method=POST", //请求的方法
3 "URL=http://www.baidu.com", //请求地址
4 "RecContentType=application/json", //指定相应头的Content-Type,这里是JSON
5 "EncType=application/json", //指定请求头的Content-Type,这里也是JSON
6 "Mode=HTML",
7 RAW_BODY_START, //请求BODY开始的标识符
8 "{\"userIds\":[1300000001,1300002029,1300003163],\"type\":0}", //BODY的内容
9 55, //上面一行BODY内容的长度
10 RAW_BODY_END, //请求BODY结束的标识符
11 LAST);
实际发送的数据内容为:
原文出处:http://www.cnblogs.com/yezhaohui/p/3280239.html