场景报错解决方案Error -27492: "HttpSendRequest" failed, Windows error code=12029 (cannot connect) and retry limit (0) exceeded for URL=""

发布时间 2023-06-29 11:11:32作者: 行者慢

解决方法1:

今天在调试Loadrunner HTTP/HTML脚本的时候出现报错Error -27492,通过将HTTPS请求修改为HTTP请求,问题得到解决。

Action.c(206): Error -27492: "HttpSendRequest" failed, Windows error code=12029 (cannot connect) and retry limit (0) exceeded for URL="https://host/xxxx/getCashierJson.htm?payOrderId=1512140000000076171&ts=1448263401360"      [MsgId: MERR-27492]
Action.c(206): web_url("getCashierJson.htm") highest severity level was "ERROR", 0 body bytes, 0 header bytes      [MsgId: MMSG-26388]

    本次问题解决有些凑巧,具体原因暂时不太清楚,弄清楚了之后再补充

解决方法2:

默认情况下,当录制http请求后回放脚本,Runtime-setting-Preferences中“winlnet replay instead of sockets(windows only)”选项是不勾选的,即通过LR sockets模拟发出请求。
但是!
LR sockets默认SSL的版本为SSL2和SSL3。当录制https时,如果SSL版本不一致,就会使sockets端口连接失败,被服务器拒绝连接,因此为使回放成功,很多人会勾选“winlnet replay instead of sockets(windows only)”。而这个勾选,也就是造成后面报错的罪魁祸首。
 
勾选“winlnet replay instead of sockets(windows only)”后,LR通过windows系统的WinInet来对外发送请求。但是微软的WinInet对流量的统计并不准确,而且当发送的请求超时20秒后,就会自动报错“请求已超时“。这一个超时,也就是造成开头报错的原因;即便在LR中设置preferences-->options-->http-request connect timeout(sec)的值设为999,也没用,因为发送的请求没不经过LR socket,LR统计不到。

 解决办法

1)取消勾选”winlnet replay instead of sockets(windows only)“选项
2)在脚本中添加https请求前,添加函数 web_set_sockets_option("SSL_VERSION","TLS")。
 

解决方法3(亲测有效):

细想,HttpSendRequest  failed,明显就是发送失败,而http又能发送,用浏览器也正常。明显就是脚本证书相关的内容导致的。

排查方法1:

用浏览器手动访问,不正常调浏览器证书相关的配置,浏览器及其他代理软件,IE代理等相关配置。把相关代理全部关掉试试。

 

 

排查方法2:

证书安全问题导致的请求被拦截,将IE相关的请求地址添加到受信任站点,把安全级别调整正常,或者直接重置。把高级重置,把相关证书的选项调整一下,最后将SSL,TLS相关的勾选上(我是使用这个方法解决的,亲测)