private HttpURLConnection getFetchConnection(WebThumbFetchRequest webThumbFetchRequest) throws WebThumbException {
		Validate.notNull(webThumbFetchRequest, "webThumbFetchRequest is null!");
		if (LOGGER.isLoggable(Level.FINE)) {
			LOGGER.fine("Attempting to send webThumbFetchRequest: " + webThumbFetchRequest);
		}
		WebThumb webThumb = new WebThumb(apikey, webThumbFetchRequest);

		try {
			HttpURLConnection connection = (HttpURLConnection) new URL(WEB_THUMB_URL).openConnection();
			connection.setInstanceFollowRedirects(false);
			connection.setDoOutput(true);
			connection.setRequestMethod("POST");

			SimpleXmlSerializer.generateRequest(webThumb, connection.getOutputStream());

			int responseCode = connection.getResponseCode();
			String contentType = getContentType(connection);
			if (LOGGER.isLoggable(Level.FINE)) {
				LOGGER.fine("webThumbFetchRequest sent. Got response: " + responseCode + " " + connection.getResponseMessage());
				LOGGER.fine("Content type: " + contentType);
			}

			if (responseCode == HttpURLConnection.HTTP_OK) {
				if (CONTENT_TYPE_TEXT_PLAIN.equals(contentType)) {
					throw new WebThumbException("Server side error: " + IOUtils.toString(connection.getInputStream()));
				}
				return connection;
			} else if (responseCode == HttpURLConnection.HTTP_INTERNAL_ERROR) {
				WebThumbResponse webThumbResponse = SimpleXmlSerializer.parseResponse(connection.getErrorStream(), WebThumbResponse.class);
				throw new WebThumbException("Server side error: " + webThumbResponse.getError().getValue());
			} else {
				throw new WebThumbException("Server side error: " + connection.getResponseCode() + " " + connection.getResponseMessage());
			}

		} catch (MalformedURLException e) {
			throw new WebThumbException("failed to send request", e);
		} catch (IOException e) {
			throw new WebThumbException("failed to send request", e);
		}

	}