/**
   * Call to execute post request
   *
   * @param method - url
   * @param envelope - string envelope for post request
   * @param headers - headrs for request
   * @return - HttpResult instance for response
   */
  public static HttpResult post(String method, String envelope, Map<String, String> headers) {
    final DefaultHttpClient httpClient = new DefaultHttpClient();
    /** set params t request */
    HttpParams params = httpClient.getParams();
    HttpConnectionParams.setConnectionTimeout(params, CONNECTION_TIMEOUT);
    HttpConnectionParams.setSoTimeout(params, TIMEOUT);
    HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), true);
    /** set url */
    HttpPost httpPost = new HttpPost(method);
    /** set headers */
    if (headers != null) {
      for (Map.Entry<String, String> header : headers.entrySet())
        httpPost.setHeader(header.getKey(), header.getValue());
    }
    /** execute request and generate HttpResult instance */
    final HttpResult resultHttpResult = new HttpResult();
    try {
      /** set envelope for post request */
      envelope = new String(envelope.getBytes("UTF-8"), "UTF-8");
      HttpEntity entity = new StringEntity(envelope, HTTP.UTF_8);
      httpPost.setEntity(entity);
      /** execute request */
      String resultEnvelope =
          httpClient.execute(httpPost, new DefaultResponseHandler(resultHttpResult));
      resultHttpResult.setEnvelope(resultEnvelope);
    } catch (ClientProtocolException ignored) {
    } catch (IOException ignored) {
    }

    return resultHttpResult;
  }