使用如下配置(LR12.5提供了JS的方式写Web-HTTP/HTML脚本了,妈妈再也不用担心我得一看C就会吐的病了):
web.setOption("MaxRedirectionDepth", "0");
然后写一个循环
lr.saveString('http//redirect.com','location'); var httpResult =""; var i = 0; web.setOption("MaxRedirectionDepth", "0", "LAST"); do { lr.message("Start---->"); web.regSaveParamEx({ paramName : 'httpCode', lb : 'HTTP/1.1 ', rb : ' ', notFound : 'warning', scope : 'Headers' }); web.regSaveParamEx({ paramName : 'location', lb : 'Location: ', rb : '\r\n', notFound : 'warning', scope : 'Headers' }); var transactionName ='tt'+i; lr.message(transactionName); lr.startTransaction(transactionName); lr.message("Visiting URL: " + reqURL); web.url({ name : 'idm' + i, url : '{location}', recContentType : 'text/html' }); lr.message("Redirect URL is: " + lr.evalString("{location}")); httpResult = lr.evalString("{httpCode}"); lr.endTransaction(transactionName, lr.AUTO) i++; lr.message("END<----"); } while (httpResult == "302");
原理就是一旦发现HTTP response code 是302,就去解析response header,找出要跳转的地方保存下来,循环去做就可以了。
另外 使用如下API可以直接获取上一次HTTP请求的返回code,不用每次都去匹配解析一下:
web.getIntProperty(web.HTTP_INFO_RETURN_CODE);
再另外, LR12.5对JS代码: web.setOption("MaxRedirectionDepth", "0")的解析是有问题,昨天刚询问了LR Team,是一个JS的支持上的问题,JS只是外面一层皮,里面的实现实际上还是调用的C的东西,结果在实现这个API的时候出现了BUG。
在API实现上仅支持了
web.setOption("MaxRedirectionDepth", "0","LAST")这种方式。