--- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/Proxy.java +++ a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/Proxy.java @@ -32,6 +32,7 @@ import java.security.GeneralSecurityException; import java.security.KeyStore; import java.security.KeyStoreException; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -63,6 +64,9 @@ import org.slf4j.LoggerFactory; * JMeter test plan. */ public class Proxy extends Thread { + // Mime-types of resources, that are not HTML and not binary that should be skipped on form parsing in JSoup + private static final List NOT_HTML_TEXT_TYPES = Arrays.asList("application/javascript", "application/json", "text/javascript"); + private static final Logger log = LoggerFactory.getLogger(Proxy.class); private static final byte[] CRLF_BYTES = { 0x0d, 0x0a }; @@ -595,10 +599,16 @@ public class Proxy extends Thread { FormCharSetFinder finder = new FormCharSetFinder(); if (SampleResult.isBinaryType(result.getContentType())) { if (log.isDebugEnabled()) { - log.debug("Will not guess encoding of url:{} as it's binary", result.getUrlAsString()); + log.debug("Will not guess encoding of URL: {} as it's binary", result.getUrlAsString()); } return; // no point parsing anything else, e.g. GIF ... } + if (isNotHtmlType(result.getContentType())) { + if (log.isDebugEnabled()) { + log.debug("Will not guess encoding of URL: {} as it's not HTML", result.getUrlAsString()); + } + return; // None HTML types have been crashing JSoup parser, so return here early + } try { finder.addFormActionsAndCharSet(result.getResponseDataAsString(), formEncodings, pageEncoding); } @@ -609,6 +619,15 @@ public class Proxy extends Thread { } } + private boolean isNotHtmlType(String contentType) { + for (String mimeType: NOT_HTML_TEXT_TYPES) { + if (contentType.startsWith(mimeType)) { + return true; + } + } + return false; + } + private String getUrlWithoutQuery(URL url) { String fullUrl = url.toString(); String urlWithoutQuery = fullUrl;