html5 bad request,java - HtmlUnit FailingHttpStatusCodeException: 400 Bad Request - Stack Overflow

在使用HtmlUnit库进行网页自动化操作时遇到两个问题:1)设置JavaScript禁用时,虽然能成功更新数据库,但在最后的重定向中失败,无法打开最终页面。2)设置不抛出错误状态码时,程序直接退出且数据库未更新。问题源于尝试刷新页面时可能引发的内存错误。解决方法是调整WebClient配置,避免使用可能导致内存问题的刷新处理方式。
摘要由CSDN通过智能技术生成

This is for my work project so i can't be as specific as i would like to be.

The java app i am designing is supposed to do the following :

fills the web-page's form,

clicks on the submit

opens a new page that displays success/failure

in 5 seconds, the new page automatically redirects itself to another page depending on success/failure

the database is updated as a result.

(the web pages already exist and are setup as i have described here, and my app is suppose to handle them automatically)

I attempt to use HtmlUnit to handle the pages, filling of forms and clicking buttons.

However i am getting some exceptions i would wish to avoid if possible.

1) when i configure my web client like so :

wc = new WebClient();

wc.setJavaScriptEnabled(false);

The code does what it is supposed to, but throws this exception :

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)

The code works, the database is successfully updated, but it fails on the last redirect and does not open the final page. :(

2) when i configure the web client as such :

wc.setThrowExceptionOnFailingStatusCode(false);

I get the following exception and the program does not work :

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)

The code exits after this point and the database is not changed.

What i want is to eliminate these exceptions completely. How do i configure WebClient to stop acting like such a jerk ?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值