Java HtmlUnit FailingHttpStatusCodeException:400错误请求
这是我的工作项目,所以我不能像我想的那样具体 我正在设计的java应用程序应该执行以下操作:Java HtmlUnit FailingHttpStatusCodeException:400错误请求,java,exception,htmlunit,http-status-code-400,Java,Exception,Htmlunit,Http Status Code 400,这是我的工作项目,所以我不能像我想的那样具体 我正在设计的java应用程序应该执行以下操作: 填充网页的表单 点击提交 打开显示成功/失败的新页面 在5秒钟内,新页面会根据成功/失败自动重定向到另一个页面 因此,数据库将更新 (这些网页已经存在,并且按照我在这里描述的那样进行设置,我的应用程序应该会自动处理它们) 我尝试使用HtmlUnit来处理页面、填写表单和单击按钮 然而,如果可能的话,我希望避免一些例外情况 1) 当我这样配置web客户端时: wc = new WebClien
- 填充网页的表单
- 点击提交
- 打开显示成功/失败的新页面
- 在5秒钟内,新页面会根据成功/失败自动重定向到另一个页面
- 因此,数据库将更新
wc = new WebClient();
wc.setJavaScriptEnabled(false);
代码执行它应该执行的操作,但引发以下异常:
dec 09, 2015 5:28:37 PM com.gargoylesoftware.htmlunit.WebClient printContentIfNecessary
INFO: statusCode=[400] contentType=[]
dec 09, 2015 5:28:37 PM com.gargoylesoftware.htmlunit.WebClient printContentIfNecessary
INFO:
com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException: 400 Bad Request for http://www.booking.com/flexiproduct.html
at com.gargoylesoftware.htmlunit.WebClient.throwFailingHttpStatusCodeExceptionIfNecessary(WebClient.java:540)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:360)
at com.gargoylesoftware.htmlunit.html.BaseFrame.loadInnerPageIfPossible(BaseFrame.java:136)
at com.gargoylesoftware.htmlunit.html.BaseFrame.loadInnerPage(BaseFrame.java:109)
at com.gargoylesoftware.htmlunit.html.HtmlPage.loadFrames(HtmlPage.java:1527)
at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:138)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:461)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359)
at com.gargoylesoftware.htmlunit.ImmediateRefreshHandler.handleRefresh(ImmediateRefreshHandler.java:83)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeRefreshIfNeeded(HtmlPage.java:1093)
at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:145)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:461)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:382)
at com.gargoylesoftware.htmlunit.html.HtmlForm.submit(HtmlForm.java:242)
at com.gargoylesoftware.htmlunit.html.HtmlImageInput.doClickAction(HtmlImageInput.java:150)
at com.gargoylesoftware.htmlunit.html.ClickableElement.click(ClickableElement.java:148)
at com.gargoylesoftware.htmlunit.html.ClickableElement.click(ClickableElement.java:109)
at com.gargoylesoftware.htmlunit.html.ClickableElement.click(ClickableElement.java:87)
at com.gargoylesoftware.htmlunit.html.HtmlImageInput.click(HtmlImageInput.java:175)
at com.gargoylesoftware.htmlunit.html.HtmlImageInput.click(HtmlImageInput.java:132)
at paymentproviders.PProvider.submitForm(PProvider.java:52)
at paymentproviders.APXProvider.completeTransaction(APXProvider.java:114)
at workApps.Lazaruss1.App.main(App.java:80)
代码正常工作,数据库已成功更新,但在最后一次重定向时失败,无法打开最后一页:(
2) 当我将web客户端配置为这样时:
wc.setThrowExceptionOnFailingStatusCode(false);
我遇到以下异常,程序无法运行:
dec 09, 2015 5:31:12 PM com.gargoylesoftware.htmlunit.WebClient printContentIfNecessary
INFO: statusCode=[400] contentType=[]
dec 09, 2015 5:31:12 PM com.gargoylesoftware.htmlunit.WebClient printContentIfNecessary
INFO:
Failed to read the SOAP message.
java.lang.RuntimeException: Refresh Aborted by HtmlUnit: Attempted to refresh a page using an ImmediateRefreshHandler which could have caused an OutOfMemoryError Please use WaitingRefreshHandler or ThreadedRefreshHandler instead.
at com.gargoylesoftware.htmlunit.ImmediateRefreshHandler.handleRefresh(ImmediateRefreshHandler.java:81)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeRefreshIfNeeded(HtmlPage.java:1093)
at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:145)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:461)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359)
at com.gargoylesoftware.htmlunit.ImmediateRefreshHandler.handleRefresh(ImmediateRefreshHandler.java:83)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeRefreshIfNeeded(HtmlPage.java:1093)
at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:145)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:461)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:382)
at com.gargoylesoftware.htmlunit.html.HtmlForm.submit(HtmlForm.java:242)
at com.gargoylesoftware.htmlunit.html.HtmlImageInput.doClickAction(HtmlImageInput.java:150)
at com.gargoylesoftware.htmlunit.html.ClickableElement.click(ClickableElement.java:148)
at com.gargoylesoftware.htmlunit.html.ClickableElement.click(ClickableElement.java:109)
at com.gargoylesoftware.htmlunit.html.ClickableElement.click(ClickableElement.java:87)
at com.gargoylesoftware.htmlunit.html.HtmlImageInput.click(HtmlImageInput.java:175)
at com.gargoylesoftware.htmlunit.html.HtmlImageInput.click(HtmlImageInput.java:132)
at paymentproviders.PProvider.submitForm(PProvider.java:52)
at paymentproviders.APXProvider.completeTransaction(APXProvider.java:114)
at workApps.Lazaruss1.App.main(App.java:80)
代码在此点之后退出,并且数据库没有更改
我想要的是完全消除这些异常。如何配置WebClient使其不再像这样胡闹?更多信息:
这是首页的格式:
<form id="paymentPageData" action="processConfirmPaymentPage" method="post">
<div style="display: none;">
<input id="transactionId" name="tranId" type="hidden" value="1510351"/>
<input id="cashAmount" name="amount" type="hidden" value="5.43"/>
<input id="usedCurrency" name="currency" type="hidden" value="EUR"/>
<input id="merchantRef" name="merchantTxRef" type="hidden" value="83002679818"/>
<input id="digestKey" name="digest" type="hidden" value="aa76e7f0db12ddbe86c1d3e13fd512e70ccfa535fbd93a347cbe2847c6187aca"/>
<input id="cssUrl" name="cssUrl" type="hidden" value=""/>
</div>
<div>
<input type="image" name="confirm" src="common/images/confirm-ukash_en_GB.jpg" border="0">
</div>
<div>
<input type="image" name="reverse" src="common/images/cancel-ukash_en_GB.jpg" border="0">
</div>
</form>
这是“成功”按钮打开的页面:
<link rel="stylesheet" type="text/css" href="">
<meta http-equiv="refresh" content="3;url=http://www.b92.net?Operation.ResultMessage=Success&DigestKey=05980b62080143b0e9c1d56b304425cde3bd4acd1277c759bad007fb5eba5f95&Merch.ID=78700005&Processor.Response=00&Account.Num=00000007&Tran.Ref=83002679818&OperationResult=SUCCESS&Operation.Currency=EUR&Operation.Amount=543&Operation.Date=2015-12-10T10:29:26Z&Transaction.Auth=01234&Merchant.TxReference=83002679818">
</head>
<body>
<div id="page">
<div id="redirectPage">
<div id="successfulRedirectPage">
<div id="header"></div>
<div id="left"></div>
<div id="centre">
<div id="successfulHeader">
Your payment was successful
</div>
<div id="successfulMessage">
You will shortly be redirected back to the original site. Or, simply click the link below.
</div>
<div id="successfulLink">
<a href="http://www.b92.net?Operation.ResultMessage=Success&DigestKey=05980b62080143b0e9c1d56b304425cde3bd4acd1277c759bad007fb5eba5f95&Merch.ID=78700005&Processor.Response=00&Account.Num=00000007&Tran.Ref=83002679818&OperationResult=SUCCESS&Operation.Currency=EUR&Operation.Amount=543&Operation.Date=2015-12-10T10:29:26Z&Transaction.Auth=01234&Merchant.TxReference=83002679818">Return</a>
</div>
</div>
<div id="right"></div>
<div id="footer"></div>
</div>
</div>
</div>
</body>
你的付款成功了
您将很快被重定向回原始站点。或者,只需单击下面的链接。
(为了保护雇主的隐私,我已经更改了财产名称)我解决了这个问题:)
刷新导致的页面太大,无法放入页面对象
我将重定向url更改为:
现在它可以工作了。更新-提交按钮不是,而是一个图像。我使用以下代码单击它:page=(HtmlPage)((ClickableElement)form.getFirstByXPath(nameValues.get(“submitXPath”))。单击();我认为关闭webclient中的JavaScript是阻止这种重定向的原因。但是如果我不打开它,我会得到一个巨大的异常,它太大了,无法放入控制台。