如何让HtmlUnit 4.7.0忽略找不到的JavaScript文件(404错误)
如何让HtmlUnit 4.7.0忽略找不到的JavaScript文件(404错误)
嗨,我来帮你解决这个问题!你提到的旧方法setExceptionOnFailingStatusCode()确实在HtmlUnit 4.x版本里被移除了,不过我们有两种实用的方式来处理这类404错误,让你的程序继续正常运行。
方法一:全局忽略所有HTTP错误状态码
如果你不想因为任何HTTP错误(比如404、500这类状态码)而中断程序,可以直接给你的WebClient添加一行配置:
webClient.getOptions().setThrowExceptionOnHttpError(false);
设置完成后,HtmlUnit遇到404这类错误状态码时,就不会抛出FailingHttpStatusCodeException了,程序会继续执行后续的页面处理逻辑。这种方式简单快捷,适合不需要精细控制错误的场景。
方法二:精准拦截特定的404请求
如果你只想针对那个缺失的moment.min.js文件做处理,不想全局禁用错误抛出(避免漏掉其他重要的HTTP错误),可以自定义一个WebConnectionWrapper来拦截这个特定请求,返回一个空的成功响应。具体修改后的代码如下:
package pima101016140; import org.htmlunit.*; import org.htmlunit.html.*; import java.io.IOException; public class Pima101016140 { public static void main(String[] args) { try (final WebClient webClient = new WebClient(BrowserVersion.FIREFOX)) { java.util.logging.Logger.getLogger("org.htmlunit").setLevel(java.util.logging.Level.OFF); webClient.getOptions().setCssEnabled(false); webClient.getOptions().setThrowExceptionOnScriptError(false); // 自定义WebConnection拦截特定请求 webClient.setWebConnection(new WebConnectionWrapper(webClient) { @Override public WebResponse getResponse(WebRequest request) throws IOException { String targetUrl = "https://www.to.pima.gov/static/js/plugins/moment/2.24.0/moment.min.js"; if (request.getUrl().toString().equals(targetUrl)) { // 返回一个空的200 OK响应,避免404异常 return new StringWebResponse("", request.getUrl()); } // 其他请求按正常流程处理 return super.getResponse(request); } }); HtmlPage page = webClient.getPage("https://www.to.pima.gov/propertyInquiry/?stateCode=101016140"); // 这里可以添加你需要的页面处理逻辑 } catch (Exception e) { System.out.println("Exception: " + e.toString()); } } }
这种方式更灵活,只会处理你指定的那个404请求,其他HTTP错误依然会正常抛出,方便你排查其他潜在问题。
备注:内容来源于stack exchange,提问作者God's Gift To Java
相关产品推荐
相关产品推荐

