private <E extends Signable> String post(String apiStr, E object, Function<E, String> fn) throws MailChimpException {
    try {
      String toPost = fn.apply(sign(object));
      final Request request = Request
        .Post(mailchimpHost + apiStr)
        .addHeader("Content-Type", "application/json")
        .body(new StringEntity(toPost, StandardCharsets.UTF_8))
        .connectTimeout(connTimeout);
      try {
        HttpResponse response = request
          .execute()
          .returnResponse();
        String result = EntityUtils.toString(response.getEntity());
        logger.debug(result);
        return result;
      } catch (IOException | RuntimeException e) {
        request.abort();
        throw logException("post", e);
      }
    } catch (RuntimeException e) {
      throw logException("post", e);
    }
  }