docs: public static InputStream getInputStreamHttpPost(URL pURL, Map pPostData, Properties pProperties, boolean pFollowRedirects, int pTimeout)
              throws IOException {
          // Open the connection, and get the stream
          HttpURLConnection conn = createHttpURLConnection(pURL, pProperties, pFollowRedirects, pTimeout);
  
          // HTTP POST method
          conn.setRequestMethod(HTTP_POST);
  
          // Iterate over and create post data string
          StringBuilder postStr = new StringBuilder();
  
          if (pPostData != null) {
              Iterator data = pPostData.entrySet().iterator();
  
              while (data.hasNext()) {
                  Map.Entry entry = (Map.Entry) data.next();
  
                  // Properties key/values can be safely cast to strings
                  // Encode the string
                  postStr.append(URLEncoder.encode((String) entry.getKey(), "UTF-8"));
                  postStr.append('=');
                  postStr.append(URLEncoder.encode(entry.getValue().toString(), "UTF-8"));
  
                  if (data.hasNext()) {
                      postStr.append('&');
                  }
              }
          }
  
          // Set entity headers
          String encoding = conn.getRequestProperty("Content-Encoding");
          if (StringUtil.isEmpty(encoding)) {
              encoding = "UTF-8";
          }
          conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
          conn.setRequestProperty("Content-Length", String.valueOf(postStr.length()));
          conn.setRequestProperty("Content-Encoding", encoding);
  
          // Get outputstream (this is where the connect actually happens)
          OutputStream os = conn.getOutputStream();
          OutputStreamWriter writer = new OutputStreamWriter(os, encoding);
  
          // Write post data to the stream
          writer.write(postStr.toString());
          writer.write("\r\n");
          writer.close();  // Does this close the underlying stream?
  
          // Get the inputstream
          InputStream is = conn.getInputStream();
  
          // We only accept the 200 OK message
          // TODO: Accept all 200 messages, like ACCEPTED, CREATED or NO_CONTENT?
          if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
              throw new IOException("The request gave the response: " + conn.getResponseCode() + ": " + conn.getResponseMessage());
          }
          return is;
      }