Class HTTPAbstractImpl

java.lang.Object
org.apache.jmeter.protocol.http.sampler.HTTPAbstractImpl
All Implemented Interfaces:
HTTPConstantsInterface, Interruptible
Direct Known Subclasses:
HTTPFileImpl, HTTPHCAbstractImpl, HTTPJavaImpl

public abstract class HTTPAbstractImpl extends Object implements Interruptible, HTTPConstantsInterface
Base class for HTTP implementations used by the HTTPSamplerProxy sampler.
  • Field Details

    • ADD_CONTENT_TYPE_TO_POST_IF_MISSING

      protected static final boolean ADD_CONTENT_TYPE_TO_POST_IF_MISSING
      Should we add to POST request content-type header if missing: Content-Type: application/x-www-form-urlencoded
    • testElement

      protected final HTTPSamplerBase testElement
  • Constructor Details

    • HTTPAbstractImpl

      protected HTTPAbstractImpl(HTTPSamplerBase testElement)
  • Method Details

    • sample

      protected abstract HTTPSampleResult sample(URL url, String method, boolean areFollowingRedirect, int frameDepth)
    • threadFinished

      protected void threadFinished()
    • notifyFirstSampleAfterLoopRestart

      protected void notifyFirstSampleAfterLoopRestart()
    • errorResult

      protected HTTPSampleResult errorResult(Throwable t, HTTPSampleResult res)
      Populates the provided HTTPSampleResult with details from the Exception. Does not create a new instance, so should not be used directly to add a subsample.

      See HTTPSamplerBase.errorResult(Throwable, HTTPSampleResult)

      Parameters:
      t - Exception representing the error.
      res - SampleResult to be modified
      Returns:
      the modified sampling result containing details of the Exception. Invokes
    • getArguments

      protected Arguments getArguments()
      Returns:
      the arguments of the associated test element
    • getAuthManager

      protected AuthManager getAuthManager()
      Returns:
      the AuthManager of the associated test element
    • getAutoRedirects

      protected boolean getAutoRedirects()
      Returns:
      flag whether to do auto redirects
    • getCacheManager

      protected CacheManager getCacheManager()
      Returns:
      the CacheManager of the associated test element
    • getConnectTimeout

      protected int getConnectTimeout()
      Returns:
      the connect timeout of the associated test element
    • getContentEncoding

      protected String getContentEncoding()
      Returns:
      the encoding of the content, i.e. its charset name
    • getCookieManager

      protected CookieManager getCookieManager()
      Returns:
      the CookieManager of the associated test element
    • getHeaderManager

      protected HeaderManager getHeaderManager()
      Returns:
      the HeaderManager of the associated test element
    • getHTTPFiles

      protected HTTPFileArg[] getHTTPFiles()
      Get the collection of files as a list. The list is built up from the filename/filefield/mimetype properties, plus any additional entries saved in the FILE_ARGS property.

      If there are no valid file entries, then an empty list is returned.

      Invokes HTTPSamplerBase.getHTTPFiles()

      Returns:
      an array of file arguments (never null)
    • getIpSource

      protected String getIpSource()
      Returns:
      the configured ip source for the associated test element
    • getIpSourceAddress

      protected InetAddress getIpSourceAddress() throws UnknownHostException, SocketException
      Gets the IP source address (IP spoofing) if one has been provided.
      Returns:
      the IP source address to use (or null, if none provided or the device address could not be found)
      Throws:
      UnknownHostException - if the hostname/ip for getIpSource() could not be resolved or not interface was found for it
      SocketException - if an I/O error occurs
    • getProxyScheme

      protected String getProxyScheme()
      Returns:
      the configured host scheme to use for proxy
    • getProxyHost

      protected String getProxyHost()
      Returns:
      the configured host to use as a proxy
    • getProxyPass

      protected String getProxyPass()
      Returns:
      the configured password to use for the proxy
    • getProxyPortInt

      protected int getProxyPortInt()
      Returns:
      the configured port to use for the proxy
    • getProxyUser

      protected String getProxyUser()
      Returns:
      the configured user to use for the proxy
    • getResponseTimeout

      protected int getResponseTimeout()
      Returns:
      the configured timeout for responses
    • getSendFileAsPostBody

      protected boolean getSendFileAsPostBody()
      Determine whether to send a file as the entire body of an entity enclosing request such as POST, PUT or PATCH. Invokes HTTPSamplerBase.getSendFileAsPostBody()
      Returns:
      flag whether to send a file as POST, PUT or PATCH
    • getSendParameterValuesAsPostBody

      protected boolean getSendParameterValuesAsPostBody()
      Determine whether to send concatenated parameters as the entire body of an entity enclosing request such as POST, PUT or PATCH. Invokes HTTPSamplerBase.getSendParameterValuesAsPostBody()
      Returns:
      flag whether to send concatenated parameters as the entire body
    • getUseKeepAlive

      protected boolean getUseKeepAlive()
      Returns:
      flag whether to use keep-alive for requests
    • getUseMultipartForPost

      @Deprecated protected boolean getUseMultipartForPost()
      Deprecated.
      Determine if we should use multipart/form-data or application/x-www-form-urlencoded for the post

      Invokes HTTPSamplerBase.getUseMultipartForPost()

      Returns:
      true if multipart/form-data should be used and method is POST
    • getUseMultipart

      protected boolean getUseMultipart()
      Determine if we should use multipart/form-data or application/x-www-form-urlencoded for the method

      Invokes HTTPSamplerBase.getUseMultipart()

      Returns:
      true if multipart/form-data should be used
    • getDoBrowserCompatibleMultipart

      protected boolean getDoBrowserCompatibleMultipart()
      Returns:
      flag whether we should do browser compatible multiparts
    • hasArguments

      protected boolean hasArguments()
      Returns:
      flag whether we have arguments to send
    • isMonitor

      @Deprecated protected boolean isMonitor()
      Deprecated.
      since 3.2 always return false
      Returns:
      flag whether monitor is enabled
    • isSuccessCode

      protected boolean isSuccessCode(int errorLevel)
      Determine if the HTTP status code is successful or not i.e. in range 200 to 399 inclusive

      Invokes HTTPSamplerBase.isSuccessCode(int)

      Parameters:
      errorLevel - status code to check
      Returns:
      whether in range 200-399 or not
    • readResponse

      protected byte[] readResponse(SampleResult res, InputStream instream, int responseContentLength) throws IOException
      Read response from the input stream, converting to MD5 digest if the useMD5 property is set.

      For the MD5 case, the result byte count is set to the size of the original response.

      Closes the inputStream

      Invokes HTTPSamplerBase.readResponse(SampleResult, InputStream, long)

      Parameters:
      res - sample to store information about the response into
      instream - input stream from which to read the response
      responseContentLength - expected input length or zero
      Returns:
      the response or the MD5 of the response
      Throws:
      IOException - if reading the result fails
    • readResponse

      protected byte[] readResponse(SampleResult res, InputStream instream, long responseContentLength) throws IOException
      Read response from the input stream, converting to MD5 digest if the useMD5 property is set.

      For the MD5 case, the result byte count is set to the size of the original response.

      Closes the inputStream

      Invokes HTTPSamplerBase.readResponse(SampleResult, InputStream, long)

      Parameters:
      res - sample to store information about the response into
      instream - input stream from which to read the response
      responseContentLength - expected input length or zero
      Returns:
      the response or the MD5 of the response
      Throws:
      IOException - if reading the result fails
    • readResponse

      @Deprecated protected byte[] readResponse(SampleResult res, BufferedInputStream in, int contentLength) throws IOException
      Read response from the input stream, converting to MD5 digest if the useMD5 property is set.

      For the MD5 case, the result byte count is set to the size of the original response.

      Closes the inputStream

      Invokes HTTPSamplerBase.readResponse(SampleResult, InputStream, long)

      Parameters:
      res - sample to store information about the response into
      in - input stream from which to read the response
      contentLength - expected input length or zero
      Returns:
      the response or the MD5 of the response
      Throws:
      IOException - when reading the result fails
    • readResponse

      protected byte[] readResponse(SampleResult res, BufferedInputStream in, long contentLength) throws IOException
      Read response from the input stream, converting to MD5 digest if the useMD5 property is set.

      For the MD5 case, the result byte count is set to the size of the original response.

      Closes the inputStream

      Invokes HTTPSamplerBase.readResponse(SampleResult, InputStream, long)

      Parameters:
      res - sample to store information about the response into
      in - input stream from which to read the response
      contentLength - expected input length or zero
      Returns:
      the response or the MD5 of the response
      Throws:
      IOException - when reading the result fails
    • resultProcessing

      protected HTTPSampleResult resultProcessing(boolean areFollowingRedirect, int frameDepth, HTTPSampleResult res)
      Follow redirects and download page resources if appropriate. this works, but the container stuff here is what's doing it. followRedirects() is actually doing the work to make sure we have only one container to make this work more naturally, I think this method - sample() - needs to take an HTTPSamplerResult container parameter instead of a boolean:areFollowingRedirect.

      Invokes HTTPSamplerBase.resultProcessing(boolean, int, HTTPSampleResult)

      Parameters:
      areFollowingRedirect - flag whether we are getting a redirect target
      frameDepth - Depth of this target in the frame structure. Used only to prevent infinite recursion.
      res - sample result to process
      Returns:
      the sample result
    • setUseKeepAlive

      protected void setUseKeepAlive(boolean b)
      Parameters:
      b - flag whether to use keep-alive for requests
    • notifySSLContextWasReset

      @Deprecated protected void notifySSLContextWasReset()
      Deprecated.
      ** unused since r1489189. **
      Called by testIterationStart if the SSL Context was reset. This implementation does nothing.
    • updateSampleResultForResourceInCache

      protected HTTPSampleResult updateSampleResultForResourceInCache(HTTPSampleResult res)
      Update HTTPSampleResult for a resource in cache
      Parameters:
      res - HTTPSampleResult
      Returns:
      HTTPSampleResult
    • configureSampleLabel

      protected final void configureSampleLabel(SampleResult res, URL url)