Java HtmlUnit FailingHttpStatusCodeException:400错误请求

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

这是我的工作项目,所以我不能像我想的那样具体

我正在设计的java应用程序应该执行以下操作:

  • 填充网页的表单
  • 点击提交
  • 打开显示成功/失败的新页面
  • 在5秒钟内,新页面会根据成功/失败自动重定向到另一个页面
  • 因此,数据库将更新
(这些网页已经存在,并且按照我在这里描述的那样进行设置,我的应用程序应该会自动处理它们)

我尝试使用HtmlUnit来处理页面、填写表单和单击按钮

然而,如果可能的话,我希望避免一些例外情况

1) 当我这样配置web客户端时:

    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&amp;DigestKey=05980b62080143b0e9c1d56b304425cde3bd4acd1277c759bad007fb5eba5f95&amp;Merch.ID=78700005&amp;Processor.Response=00&amp;Account.Num=00000007&amp;Tran.Ref=83002679818&amp;OperationResult=SUCCESS&amp;Operation.Currency=EUR&amp;Operation.Amount=543&amp;Operation.Date=2015-12-10T10:29:26Z&amp;Transaction.Auth=01234&amp;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&amp;DigestKey=05980b62080143b0e9c1d56b304425cde3bd4acd1277c759bad007fb5eba5f95&amp;Merch.ID=78700005&amp;Processor.Response=00&amp;Account.Num=00000007&amp;Tran.Ref=83002679818&amp;OperationResult=SUCCESS&amp;Operation.Currency=EUR&amp;Operation.Amount=543&amp;Operation.Date=2015-12-10T10:29:26Z&amp;Transaction.Auth=01234&amp;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是阻止这种重定向的原因。但是如果我不打开它,我会得到一个巨大的异常,它太大了,无法放入控制台。