lunahaha527 发表于 2013-9-6 14:33:54

【高手请进】请教下,用LR向服务器发送HTTP协议的XML格式文件字段问题

本帖最后由 lunahaha527 于 2013-9-12 15:24 编辑

具体的发送格式如下:
Action()
{
lr_start_transaction("xxxxServiceReq");
   web_custom_request("xxxxHTTPRequest",
"URL=http://192.168.1.115:8080/pay/getToken",
"Method=POST",
"Resource=0",
"RecContentType=text/xml",
"Referer=",
"Mode=HTML",
"EncType=text/xml; charset=utf-8",
"Body=<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                        "\n<getToken>"
                        "\n<appUser>jqf_bus_api1.126.com</appUser>"
                        "\n<appPwd>21232F297A57A5A743894A0E4A801FC3</appPwd>"
                        "\n<appSign>Vf01RfaV/RXtelr5TO6l+YtHz5cdxlB1YIDi0/NBTU0/sp0QJfWN68yjCr/S/2YmbueYq8J1DOFKarMqRG4GFg==</appSign>"
                        "\n<billId>888</billId>"
                        "\n<amt>100</amt>"
                        "\n<currencyCode>USD</currencyCode>"
                        "\n</getToken>",
LAST);
lr_end_transaction("xxxxgServiceReq", LR_AUTO);
return 0;
}

查看服务器可以接收到此请求。但是LR日志中报:
Action.c(5): 通知: 事务 "xxxxServiceReq" 已启动。
Action.c(6): 警告 -26663: 缺少 Content-Length 值或该值无效       
1)【请问这个Length怎么加到上述请求中】
Action.c(6): web_custom_request("xxxxHTTPRequest") 最高严重级别为“warning”,135 个正文字节,209 个标头字节,11 个成块开销字节       
Action.c(24): 错误: 无法结束事务 "xxxxgServiceReq" (按名称)。请检查是否进行了调用以启动事务操作。
2)【剩下的三条action是否和第一个问题有关呢?还是脚本中还有其它问题???】

云层 发表于 2013-9-6 16:26:44

应该是你请求前面少了点关于Content-Length 的声明

lunahaha527 发表于 2013-9-6 16:43:36

回复 2# 云层


    就是不知道这个Content-Length加哪儿合适
貌似加哪儿都提示这个。
能告诉我这个字段应该放在哪边合适吗?:dizzy:

云层 发表于 2013-9-6 16:48:01

试试web_add_header

lunahaha527 发表于 2013-9-6 17:37:37

回复 4# 云层


    请问云层,有关web_add_header在书里那部分有详细介绍啊?另外,对于新手初学脚本编写,有没有好的建议呢

lunahaha527 发表于 2013-9-6 17:39:00

回复 4# 云层


    to 云层:
   请问web_add_header在书里哪个章节有介绍,另外,对于新人要学习LR脚本编程还想快速上手,有没有比较好的学习方法呢?

云层 发表于 2013-9-8 21:35:00

没有技巧
1.学会沟通
2.学会看帮助

lunahaha527 发表于 2013-9-10 14:19:41

本帖最后由 lunahaha527 于 2013-9-10 14:23 编辑

回复 7# 云层


    我现在加了:
Action()
{
lr_start_transaction("ServiceReq");
web_add_header("Content-Length","342");
web_custom_request("HTTPRequest",
"URL=http://192.168.1.160:8080/pay/getToken",
"Method=POST",
"Resource=0",
"RecContentType=text/xml",
"Referer=",
"Mode=HTML",
"EncType=text/xml; charset=utf-8",
"Body=<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                        "\n<getToken>"
                        "\n<appUser>jqf_bus_api1.126.com</appUser>"
                        "\n<appPwd>21232F297A57A5A743894A0E4A801FC3</appPwd>"
                        "\n<appSign>Vf01RfaV/RXtelr5TO6l+YtHz5cdxlB1YIDi0/NBTU0/sp0QJfWN68yjCr/S/2YmbueYq8J1DOFKarMqRG4GFg==</appSign>"
                        "\n<billId>888</billId>"
                        "\n<amt>100</amt>"
                        "\n<currencyCode>USD</currencyCode>"
                        "\n</getToken>",
LAST);
lr_end_transaction("ServiceReq", LR_AUTO);
return 0;
}
日志显示为:
Starting action Action.
Action.c(8): Notify: Transaction "ServiceReq" started.
Action.c(9): Warning -26593: The header being added may cause unpredictable results when applied to all ensuing URLs. It is added anyway       
Action.c(9): web_add_header("Content-Length") highest severity level was "warning"       
Action.c(10): Warning -26663: Content-Length value is missing or invalid       
Action.c(10): web_custom_request("HTTPRequest") highest severity level was "warning", 73 body bytes, 209 header bytes, 11 chunking overhead bytes       
Action.c(28): Notify: Transaction "ServiceReq" ended with "Pass" status (Duration: 20.7967 Wasted Time: 0.6646).
问题:如上的日志是否我定义的长度有误???怎么计算这个长度呢?
web_custom_request("HTTPRequest") highest severity level was "warning", 73 body bytes, 209 header bytes, 11 chunking overhead bytes
这个错误又表明了什么呢

地壳 发表于 2013-9-10 15:01:32

用这个函数试试:web_add_auto_header ,它比web_add_header灵活

lunahaha527 发表于 2013-9-10 15:13:21

回复 9# 地壳


    还是不行,错误依然存在:dizzy:

lunahaha527 发表于 2013-9-11 10:22:01

有人知道这个问题怎么解决不??急啊

lunahaha527 发表于 2013-9-12 15:05:50

高人请进一下,现在卡在这儿不能动了。一直提醒content-length不对。有谁知道怎么计算发送的长度不?
或者可以自动获取???

云层 发表于 2013-9-12 15:39:16

你要问问开发到底他们是为啥要验这个东西,还是说你的xml抛过去确实超长度了

lunahaha527 发表于 2013-9-12 15:44:42

回复 13# 云层


    问过开发了,没有对content-length做判断,我感觉停在这儿是LR工具检查有问题吧

arning -26663: Content-Length value is missing or invalid       
Action.c(63): web_custom_request("HTTPRequest") highest severity level was "warning", 73 body bytes, 209 header bytes, 11 chunking overhead bytes       
Action.c(76): Notify: Transaction "ServiceReq2" ended with "Pass" status (Duration: 20.1163 Wasted Time: 0.0048).

真不知道这个值是怎么计算才正确!

lunahaha527 发表于 2013-9-12 15:50:24

真搞不懂了,用其它的工具,能够计算出来的固定的length放到脚本里面还是提示这个。
to 云层:
如果存在warning是否会对整个性能有影响???

lunahaha527 发表于 2013-9-12 15:53:41

本帖最后由 lunahaha527 于 2013-9-12 15:55 编辑

回复 15# lunahaha527


    构造虚拟用户稍跑了下,就一堆fail。看来是有影响。这个问题很头疼啊

lunahaha527 发表于 2013-9-12 16:18:48

回复 14# lunahaha527


    超长的可能性也不大吧,因为我的脚本并不是下载功能,只是发个请求过去,不会超过110字节

lunahaha527 发表于 2013-9-13 13:03:42

高手们,哪位谁能够告诉我啊?
现在就卡在这个地方了

筱卺厸 发表于 2013-9-16 21:46:04

回复 1# lunahaha527


    HTTP是在TCP层之上的,你可用一个HTTP+XML的工具发送一下,然后抓包,把数据报文拿下来,利用winsocket发送。

content_length是一定要指定的,要不然server端怎么知道它有没有接收完呢?

lunahaha527 发表于 2013-9-17 11:10:21

本帖最后由 lunahaha527 于 2013-9-17 13:43 编辑

回复 19# 筱卺厸


    高手,能否说详细点,用WINSOCK具体详细怎么获取呢?能否详细说下思路?
现在我已经抓到HTTP的包了:
POST /pay/authToken HTTP/1.1
Host: 192.168.1.115:8080
Content-Length: 92
<?xml version="1.0" encoding="UTF-8"?>
<authToken>
<token>38KyBU7n</token>
</authToken>
我从网上down了个socket程序
类似如下:

;WSRData 2 1
send buf0 839"------请问这个值是否是真实抓包中获取到的发送请求的长度呢?目前我的脚本执行时,应该是这个值未给定造成的,怎么获取呢
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<Transaction>
<Transaction_Header>
    <ext_attributes/>
    <processes/>
    <transaction_rollback/>
   </Transaction_Header>
·········
    </request>
    <response/>
    <Multi_Request/>
</Transaction_Body>
</Transaction>
#"
页: [1] 2
查看完整版本: 【高手请进】请教下,用LR向服务器发送HTTP协议的XML格式文件字段问题