# Class HTTPHC4Impl

java.lang.Object
org.apache.jmeter.protocol.http.sampler.HTTPAbstractImpl
org.apache.jmeter.protocol.http.sampler.HTTPHCAbstractImpl
org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl

All Implemented Interfaces:
  `HTTPConstantsInterface, Interruptible`

public class HTTPHC4Impl extends HTTPHCAbstractImpl
HTTP Sampler using Apache HttpClient 4.x.

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static final class`
`HTTPHC4Impl.HttpDelete`

## Field Summary

### Fields inherited from class HTTPHCAbstractImpl

`CPS_HTTP, CPS_HTTPS, HTTP_VERSION, localAddress, localHost, NONPROXY_HOSTS, nonProxyHostFull, nonProxyHostSuffix, nonProxyHostSuffixSize, PROXY_DEFINED, PROXY_DOMAIN, PROXY_HOST, PROXY_PASS, PROXY_PORT, PROXY_USER, SO_TIMEOUT, USE_CACHED_SSL_CONTEXT, USE_LOOPBACK`

### Fields inherited from class HTTPAbstractImpl

`testElement`

### Fields inherited from interface HTTPConstantsInterface

`APPLICATION_X_WWW_FORM_URLENCODED, CACHE_CONTROL, CONNECT, CONNECTION_CLOSE, COPY, DATE, DEFAULT_HTTP_PORT, DEFAULT_HTTP_PORT_STRING, DEFAULT_HTTPS_PORT, DEFAULT_HTTPS_PORT_STRING, DELETE, ENCODING_GZIP, ETAG, EXPIRES, GET, HEAD, HEADER_AUTHORIZATION, HEADER_CONNECTION, HEADER_CONTENT_DISPOSITION, HEADER_CONTENT_ENCODING, HEADER_CONTENT_LENGTH, HEADER_CONTENT_TYPE, HEADER_COOKIE, HEADER_HOST, HEADER_LOCAL_ADDRESS, HEADER_LOCATION, HEADER_SET_COOKIE, HTTP_1_1, IF_MODIFIED_SINCE, IF_NONE_MATCH, KEEP_ALIVE, LAST_MODIFIED, LOCK, MKCALENDAR, MKCOL, MOVE, MULTIPART_FORM_DATA, OPTIONS, PATCH, POST, PROPFIND, PROPPATCH, PROTOCOL_HTTP, PROTOCOL_HTTPS, PUT, REPORT, TRACE, TRANSFER_ENCODING, UNLOCK`

## Constructor Summary

Constructors
Modifier
Constructor
Description
`protected`
`HTTPHC4Impl(HTTPSamplerBase testElement)`

## Method Summary

Modifier and Type
Method
Description
`protected HTTPSampleResult`
`createSampleResult(URL url, String method)`
Create HTTPSampleResult filling url, method and SampleLabel.
`protected String`
`getCharsetWithDefault(HttpParams putParams)`
If contentEncoding is not set by user, then Platform encoding will be used to convert to String
`protected void`
`handleMethod(String method, HTTPSampleResult result, HttpRequestBase httpRequest, HttpContext localContext)`
Calls `sendPostData(HttpPost)` if method is `POST` and `sendEntityData(HttpEntityEnclosingRequestBase)` if method is `PUT` or `PATCH`
`boolean`
`interrupt()`
Interrupt the current operation if possible.
`protected void`
`notifyFirstSampleAfterLoopRestart()`
`protected HTTPSampleResult`
`sample(URL url, String method, boolean areFollowingRedirect, int frameDepth)`
`protected String`
`sendEntityData(HttpEntityEnclosingRequestBase entity)`
Creates the entity data to be sent.
`protected String`
`sendPostData(HttpPost post)`
`protected String`
`setConnectionCookie(HttpRequest request, URL url, CookieManager cookieManager)`
Extracts all the required cookies for that particular URL request and sets them in the `HttpMethod` passed in.
`protected void`
`setConnectionHeaders(HttpRequestBase request, URL url, HeaderManager headerManager, CacheManager cacheManager)`
Extracts all the required non-cookie headers for that particular URL request and sets them in the `HttpMethod` passed in
`protected void`
`setDefaultRequestHeaders(HttpRequest request)`
Set any default request headers to include
`protected void`
`setupRequest(URL url, HttpRequestBase httpRequest, HTTPSampleResult res)`
Setup following elements on httpRequest: ConnRoutePNames.LOCAL_ADDRESS enabling IP-SPOOFING Socket and connection timeout Redirect handling Keep Alive header or Connection Close Calls setConnectionHeaders to setup headers Calls setConnectionCookie to setup Cookie
`protected void`
`threadFinished()`

### Methods inherited from class HTTPHCAbstractImpl

`isDynamicProxy, isNonProxy, isNullOrEmptyTrimmed, isPartialMatch, isStaticProxy`

### Methods inherited from class HTTPAbstractImpl

`errorResult, getArguments, getAuthManager, getAutoRedirects, getCacheManager, getConnectTimeout, getContentEncoding, getCookieManager, getDoBrowserCompatibleMultipart, getHeaderManager, getHTTPFiles, getIpSource, getIpSourceAddress, getProxyHost, getProxyPass, getProxyPortInt, getProxyUser, getResponseTimeout, getSendFileAsPostBody, getSendParameterValuesAsPostBody, getUseKeepAlive, getUseMultipartForPost, hasArguments, isMonitor, isSuccessCode, notifySSLContextWasReset, readResponse, readResponse, resultProcessing, setUseKeepAlive, updateSampleResultForResourceInCache`

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### HTTPHC4Impl

protected HTTPHC4Impl(HTTPSamplerBase testElement)

## Method Details

### sample

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

Specified by:
  `sample` in class `HTTPAbstractImpl`

### handleMethod

protected void handleMethod(String method, HTTPSampleResult result, HttpRequestBase httpRequest, HttpContext localContext) throws IOException
Calls `sendPostData(HttpPost)` if method is `POST` and `sendEntityData(HttpEntityEnclosingRequestBase)` if method is `PUT` or `PATCH`

Field HTTPSampleResult#queryString of result is modified in the 2 cases

Parameters:
  `method` - String HTTP method
  `result` - `HTTPSampleResult`
  `httpRequest` -
  invalid reference

      HttpRequestBase

  `localContext` -
  invalid reference

      HttpContext

Throws:
  `IOException` - when posting data fails due to I/O

### createSampleResult

protected HTTPSampleResult createSampleResult(URL url, String method)
Create HTTPSampleResult filling url, method and SampleLabel. Monitor field is computed calling isMonitor()

Parameters:
  `url` - URL
  `method` - HTTP Method
Returns:
  `HTTPSampleResult`

### setupRequest

protected void setupRequest(URL url, HttpRequestBase httpRequest, HTTPSampleResult res) throws IOException
Setup following elements on httpRequest:

- ConnRoutePNames.LOCAL_ADDRESS enabling IP-SPOOFING
- Socket and connection timeout
- Redirect handling
- Keep Alive header or Connection Close
- Calls setConnectionHeaders to setup headers
- Calls setConnectionCookie to setup Cookie

Parameters:
  `url` - `URL` of the request
  `httpRequest` - http request for the request
  `res` - sample result to set cookies on
Throws:
  `IOException` - if hostname/ip to use could not be figured out

### setDefaultRequestHeaders

protected void setDefaultRequestHeaders(HttpRequest request)
Set any default request headers to include

Parameters:
  `request` - the HttpRequest to be used

### setConnectionCookie

protected String setConnectionCookie(HttpRequest request, URL url, CookieManager cookieManager)
Extracts all the required cookies for that particular URL request and sets them in the `HttpMethod` passed in.

Parameters:
  `request` - `HttpRequest` for the request
  `url` - `URL` of the request
  `cookieManager` - the `CookieManager` containing all the cookies
Returns:
  a String containing the cookie details (for the response) May be null

### setConnectionHeaders

protected void setConnectionHeaders(HttpRequestBase request, URL url, HeaderManager headerManager, CacheManager cacheManager)
Extracts all the required non-cookie headers for that particular URL request and sets them in the `HttpMethod` passed in

Parameters:
  `request` - `HttpRequest` which represents the request
  `url` - `URL` of the URL request
  `headerManager` - the `HeaderManager` containing all the cookies for this `UrlConfig`
  `cacheManager` - the CacheManager (may be null)

### sendPostData

protected String sendPostData(HttpPost post) throws IOException

Parameters:
  `post` -
  invalid reference

      HttpPost

Returns:
  String posted body if computable
Throws:
  `IOException` - if sending the data fails due to I/O

### sendEntityData

protected String sendEntityData(HttpEntityEnclosingRequestBase entity) throws IOException
Creates the entity data to be sent.

If there is a file entry with a non-empty MIME type we use that to set the request Content-Type header, otherwise we default to whatever header is present from a Header Manager.

If the content charset `HTTPAbstractImpl.getContentEncoding()` is null or empty we use the HC4 default provided by

invalid reference

    HTTP#DEF_CONTENT_CHARSET

which is ISO-8859-1.

Parameters:
  `entity` - to be processed, e.g. PUT or PATCH
Returns:
  the entity content, may be empty
Throws:
  `UnsupportedEncodingException` - for invalid charset name
  `IOException` - cannot really occur for ByteArrayOutputStream methods

### getCharsetWithDefault

protected String getCharsetWithDefault(HttpParams putParams)
If contentEncoding is not set by user, then Platform encoding will be used to convert to String

Parameters:
  `putParams` -
  invalid reference

      HttpParams

Returns:
  String charset

### notifyFirstSampleAfterLoopRestart

protected void notifyFirstSampleAfterLoopRestart()

Overrides:
  `notifyFirstSampleAfterLoopRestart` in class `HTTPAbstractImpl`

### threadFinished

protected void threadFinished()

Overrides:
  `threadFinished` in class `HTTPAbstractImpl`

### interrupt

public boolean interrupt()
Description copied from interface: `Interruptible`
Interrupt the current operation if possible.

Returns:
  `true` if there was an operation to interrupt.