public SimpleHTTPRequest2 doPost() {
		if (this.madeRequest) {
			throw new IllegalStateException("Already made request");
		}
		this.madeRequest = true;
		HttpURLConnection connection = null;
		InputStream is = null;
		try {
			connection = this.getConnection();
			connection.setRequestMethod("POST");
			connection.setDoOutput(true);
			byte[] data = this.getPostBody();
			connection.setRequestProperty("Content-Length", Integer.toString(data.length));
			for (String key : this.headers.keySet()) {
				connection.setRequestProperty(key, this.headers.get(key));
			}
			connection.getOutputStream().write(data);
			is = new BufferedInputStream(connection.getInputStream());
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			pipeStreams(is, bos);
			this.response = bos.toByteArray();
			return this;
		} catch (MalformedURLException ex) {
			log.log(Level.WARNING, ex.getMessage(), ex);
			return null;
		} catch (ProtocolException ex) {
			throw new IllegalStateException(ex);
		} catch (IOException ex) {
			log.log(Level.WARNING, ex.getMessage(), ex);
			return null;
		} finally {
			if (is != null) {
				try {
					is.close();
				} catch (IOException ex) {
					log.log(Level.WARNING, ex.getMessage(), ex);
				}
			}
			if (connection != null) {
				connection.disconnect();
			}
		}
	}