public void download(String address) {
    StringBuilder jsonHtml = new StringBuilder();
    try {
      // ���� url ����
      URL url = new URL(address);
      // ���ؼ� ��ü ��
      HttpURLConnection conn = (HttpURLConnection) url.openConnection();
      conn.setDefaultUseCaches(false);
      conn.setDoInput(true); // �������� �б� ��� ����
      conn.setDoOutput(false); // ������ ���� ��� ����
      conn.setRequestMethod("POST"); // ��� ����� POST

      // ����Ǿ��
      if (conn != null) {
        conn.setConnectTimeout(10000);
        conn.setUseCaches(false);
        // ����Ȯ�� �ڵ尡 ���ϵǾ��� ��
        if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
          BufferedReader br =
              new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
          for (; ; ) {
            String line = br.readLine();
            if (line == null) break;
            jsonHtml.append(line);
          }
          br.close();
        }
        conn.disconnect();
      }
    } catch (Exception e) {
      Log.w(TAG, e.getMessage());
    }
  }
  /**
   * Send XML Signature to the Server stored in local store in xml file
   *
   * @param filename
   * @throws URLClientException
   */
  public int sendXMLSignatureToServer(String filename) throws URLClientException {
    HttpURLConnection connection = null;
    int respCode;
    try {
      File file = XMLSignatureHelper.getSignatureXMLFile(filename);
      connection = getURLConnectionToServer(signaturesStoreURL);
      connection.setRequestProperty("Cache-Control", "no-cache, no-store");
      connection.setRequestProperty("Pragma", "no-cache");
      connection.setRequestProperty("Content-Type", "text/xml");
      connection.setRequestMethod("POST");
      connection.setDefaultUseCaches(false);
      connection.setInstanceFollowRedirects(false);
      connection.setDoOutput(true);

      OutputStream outputStream = connection.getOutputStream();
      OutputStreamWriter out = new OutputStreamWriter(outputStream);

      BufferedReader in = new BufferedReader(new FileReader(file));
      String str;
      while ((str = in.readLine()) != null) {
        out.write(str);
      }
      out.close();

      respCode = connection.getResponseCode();

      if (respCode != 200) {
        throw new URLClientException("http response code: " + respCode);
      } else {
        System.out.println("Signature was succesfully sent");
        System.out.println("response Code = " + respCode);
      }

      /*
              InputStream is = null;

              try {
                  is = connection.getInputStream();

                  int x;
          	    while ( (x = is.read()) != -1)
          	    {
          		System.out.write(x);
          	    }
          	    is.close();

              } catch (IOException e) {
              }
      */

      //  fis.read(b);

    } catch (IOException e) {
      throw new URLClientException(e);
    } finally {
      connection.disconnect();
    }
    return respCode;
  }
  public static String PostData(String strUrl, String strData) {
    StringBuilder strResult = new StringBuilder("");

    try {
      URL url = new URL(strUrl);
      HttpURLConnection urlConnection = null;

      if (url.getProtocol().toLowerCase().equals("https")) {
        trustAllHosts();

        HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
        https.setHostnameVerifier(DO_NOT_VERIFY);
        urlConnection = https;
      } else {
        urlConnection = (HttpURLConnection) url.openConnection();
      }

      urlConnection.setDefaultUseCaches(false);
      urlConnection.setDoInput(true);
      urlConnection.setDoOutput(true);
      urlConnection.setRequestMethod("POST");

      urlConnection.setRequestProperty("content-type", "application/x-www-form-urlencoded");

      OutputStreamWriter outStream =
          new OutputStreamWriter(urlConnection.getOutputStream(), "UTF-8");
      PrintWriter writer = new PrintWriter(outStream);
      writer.write(strData.toString());
      writer.flush();

      if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {

        BufferedReader in =
            new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));

        String inputLine;
        while ((inputLine = in.readLine()) != null) {
          strResult.append(inputLine);
        }
      } else {
        strResult.append(urlConnection.getResponseCode());
      }
    } catch (MalformedURLException e) {
      strResult.append(e.toString());
      e.printStackTrace();
    } catch (IOException e) {
      strResult.append(e.toString());
      e.printStackTrace();
    }

    return strResult.toString();
  }
    private String transportHttpMessage(String message) {
      URL serverurl;
      HttpURLConnection connection;

      try {
        serverurl = new URL(this.ServerUrl);
        connection = (HttpURLConnection) serverurl.openConnection();
        connection.setDefaultUseCaches(false);
        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("content-type", "application/x-www-form-urlencoded");
      } catch (Exception e) {
        e.printStackTrace();
        return null;
      }

      OutputStreamWriter outstream;
      try {
        outstream = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
        outstream.write(message);
        outstream.flush();
        /*
        PrintWriter writer = new PrintWriter(outstream);
        writer.write(message);
        writer.flush();
        */
        outstream.close();
      } catch (Exception e) {
        e.printStackTrace();
        return null;
      }

      StringBuilder strbuilder = new StringBuilder();
      try {
        InputStreamReader instream = new InputStreamReader(connection.getInputStream(), "UTF-8");
        BufferedReader reader = new BufferedReader(instream);

        String str;
        while ((str = reader.readLine()) != null) strbuilder.append(str + "\r\n");

        instream.close();
      } catch (Exception e) {
        e.printStackTrace();
        return null;
      }

      connection.disconnect();
      return strbuilder.toString();
    }
  /**
   * Issues a request to a service using POST
   *
   * @param service
   * @param request
   * @param contentType
   * @param timeoutConncetion
   * @param timeoutRead
   * @return
   * @throws SocketTimeoutException
   */
  public static String post(
      String service, String request, String contentType, int timeoutConnection, int timeoutRead)
      throws SocketTimeoutException, MalformedURLException {

    try {

      HttpURLConnection urlConnection = (HttpURLConnection) new URL(service).openConnection();

      urlConnection.setDoInput(true);
      urlConnection.setDoOutput(true); // triggers POST
      urlConnection.setUseCaches(false);
      urlConnection.setDefaultUseCaches(false);
      urlConnection.setConnectTimeout(timeoutConnection * 1000);
      urlConnection.setReadTimeout(timeoutRead * 1000);

      urlConnection.setRequestMethod("POST");
      urlConnection.setRequestProperty("Content-Type", contentType);
      urlConnection.setRequestProperty("Accept", "input/xml");

      // write request
      OutputStream out = urlConnection.getOutputStream();
      out.write(request.getBytes());
      out.close();

      // read response
      BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
      StringBuffer sb = new StringBuffer();
      String input;
      while ((input = br.readLine()) != null) {
        sb.append(input + "\n");
      }
      // close buffered reader
      br.close();

      return sb.toString();

    } catch (SocketTimeoutException e) {
      // re-throw the exception
      throw e;
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    // default
    return null;
  }
  @RequestMapping("url")
  public String checkURL(
      @RequestParam(value = "url", required = false) String u,
      @RequestParam(value = "params", required = false) String params,
      Model model) {
    if (u != null) {
      try {
        final URL url = new URL(u);
        final HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setUseCaches(false);
        urlConnection.setDefaultUseCaches(false);
        urlConnection.setInstanceFollowRedirects(true);

        //                urlConnection.setReadTimeout(3000);
        //                urlConnection.setConnectTimeout(3000);

        if (params != null) {
          StringTokenizer st = new StringTokenizer(params, "\n\r");
          while (st.hasMoreTokens()) {
            final String s = st.nextToken();
            final String[] split = s.split(":");
            urlConnection.setRequestProperty(split[0].trim(), split[1].trim());
          }
        }

        try (final InputStream inputStream = urlConnection.getInputStream()) {
          final BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
          final StringBuilder sb = new StringBuilder();

          String s = reader.readLine();
          while (s != null) {
            sb.append(s.trim());
            s = reader.readLine();
          }
          model.addAttribute("response", sb.toString());
        } catch (IOException ex) {
          model.addAttribute("response", ex.getMessage());
        }
      } catch (IOException ex) {
        model.addAttribute("response", ex.getMessage());
      }
    }
    model.addAttribute("url", u);
    model.addAttribute("params", params);
    return "/content/maintain/url";
  }
  /**
   * Send XMLSignature DOM Document to the server...
   *
   * @param doc
   * @throws URLClientException
   */
  public int sendXMLSignatureToServer(Document doc) throws URLClientException {
    int respCode = 0;
    HttpURLConnection connection = null;
    try {
      connection = getURLConnectionToServer(signaturesStoreURL);
      connection.setRequestProperty("Cache-Control", "no-cache, no-store");
      connection.setRequestProperty("Pragma", "no-cache");
      connection.setRequestProperty("Content-Type", "text/xml");
      connection.setRequestMethod("POST");
      connection.setDefaultUseCaches(false);
      connection.setInstanceFollowRedirects(false);
      connection.setDoOutput(true);

      /* get outputs stream from URL Connection*/
      OutputStream outputStream = connection.getOutputStream();
      /* Get ByteArrayOuptutStram with readed xmlSignature DOM */
      ByteArrayOutputStream baos = XMLSignatureHelper.printDOMDocumentToOutputStream(doc);
      /* change OutputStream to InputStream*/
      ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());

      /* Write data from InputStream to OutputStream to URL connection*/
      int input = 0;
      while ((input = bais.read()) != -1) {
        outputStream.write(input);
      }
      outputStream.flush();
      outputStream.close();

      respCode = connection.getResponseCode();

      if (respCode != 200) {
        throw new URLClientException("http response code: " + respCode);
      }
      // TODO Udelat nejakou rozumnou reakci na odpoved od Serveru

    } catch (ProtocolException e) {
      throw new URLClientException(e);
    } catch (IOException e) {
      throw new URLClientException(e);
    } finally {
      connection.disconnect();
    }

    return respCode;
  }
  /**
   * Prepares a connection to the server.
   *
   * @param extraHeaders extra headers to add to the request
   * @return the unopened connection
   * @throws IOException
   */
  private HttpURLConnection prepareConnection(Map<String, String> extraHeaders) throws IOException {

    // create URLConnection
    HttpURLConnection connection = (HttpURLConnection) serviceUrl.openConnection(connectionProxy);
    connection.setConnectTimeout(connectionTimeoutMillis);
    connection.setReadTimeout(readTimeoutMillis);
    connection.setAllowUserInteraction(false);
    connection.setDefaultUseCaches(false);
    connection.setDoInput(true);
    connection.setDoOutput(true);
    connection.setUseCaches(false);
    connection.setInstanceFollowRedirects(true);
    connection.setRequestMethod("POST");

    setupSsl(connection);
    addHeaders(extraHeaders, connection);

    return connection;
  }
  public static boolean grabLauncher(String md5, File file, int tries) {
    try {
      URL url = new URL("http://s3.amazonaws.com/Minecraft.Download/launcher/launcher.pack.lzma");
      HttpURLConnection connection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);

      connection.setUseCaches(false);
      connection.setDefaultUseCaches(false);
      connection.setRequestProperty("Cache-Control", "no-store,max-age=0,no-cache");
      connection.setRequestProperty("Expires", "0");
      connection.setRequestProperty("Pragma", "no-cache");
      if (md5 != null) {
        connection.setRequestProperty("If-None-Match", md5.toLowerCase());
      }
      connection.setConnectTimeout(15000);
      connection.setReadTimeout(10000);

      int code = connection.getResponseCode();
      if (code / 100 == 2) {
        InputStream inputStream = connection.getInputStream();
        FileOutputStream outputStream = new FileOutputStream(file);

        byte[] buffer = new byte[' '];
        try {
          int read = inputStream.read(buffer);
          while (read >= 1) {
            outputStream.write(buffer, 0, read);
            read = inputStream.read(buffer);
          }
        } finally {
          inputStream.close();
          outputStream.close();
        }
        return true;
      }
      if (tries == 0) {
        return false;
      }
      return grabLauncher(md5, file, tries - 1);
    } catch (Exception e) {
    }
    return false;
  }
 public void setDefaultUseCaches(boolean flag) {
   _flddelegate.setDefaultUseCaches(flag);
 }
	public static InputStream invokeRequest(String urlToRequest,
			REQUEST_METHOD method, Map<String, String> parameters) {
		if (urlToRequest == null || urlToRequest.trim().length() == 0)
			return null;
		if (parameters == null) {
			parameters = new HashMap<String, String>();
		}
		String urlParameters = constructURLString(parameters);

		if ((method == null || REQUEST_METHOD.GET.equals(method))
				&& urlParameters.length() < 900 && urlParameters.length() > 0) {
			if (urlToRequest.indexOf("?") == -1)
				urlToRequest += "?" + urlParameters;
			else
				urlToRequest += "&" + urlParameters;
			method = REQUEST_METHOD.GET;
		}
		InputStream in = null;
		try {
			URL url = new URL(urlToRequest);
			System.out.println("Reuqest URL:::" + urlToRequest);
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			OutputStream out;

			byte[] buff;

			if (REQUEST_METHOD.GET.equals(method)) {
				con.setRequestMethod("GET");
				con.setDoOutput(false);
				con.setDoInput(true);
				con.connect();
				in = con.getInputStream();
			} else if (REQUEST_METHOD.MULTIPART_FORM_DATA.equals(method)) {
				con.setRequestMethod("POST");
				con.setDoOutput(true);
				con.setDoInput(true);
				con.setUseCaches(false);
				con.setDefaultUseCaches(false);

				String boundary = MultipartFormOutputStream.createBoundary();
				// The following request properties were recommended by the MPF
				// class
				con.setRequestProperty("Accept", "*/*");
				con.setRequestProperty("Content-Type",
						MultipartFormOutputStream.getContentType(boundary));
				con.setRequestProperty("Connection", "Keep-Alive");
				con.setRequestProperty("Cache-Control", "no-cache");
				con.connect();
				MultipartFormOutputStream mpout = new MultipartFormOutputStream(
						con.getOutputStream(), boundary);
				// First, write out the parameters
				for (Map.Entry<String, String> entry : parameters.entrySet()) {
					mpout.writeField(entry.getKey(), entry.getValue());
				}
				// Now write the image
				String mimeType = "image/jpg";
				String fullFilePath = parameters.get("file_path");
				if (fullFilePath.endsWith("gif")) {
					mimeType = "image/gif";
				} else if (fullFilePath.endsWith("png")) {
					mimeType = "image/png";
				} else if (fullFilePath.endsWith("tiff")) {
					mimeType = "image/tiff";
				}
				mpout.writeFile("uploadFile", mimeType, new File(fullFilePath));
				mpout.flush();
				mpout.close();
				// All done, get the InputStream
				in = con.getInputStream();
			} else {
				con.setRequestMethod("POST");
				con.setDoOutput(true);
				con.setDoInput(true);
				con.connect();
				out = con.getOutputStream();
				buff = urlParameters.getBytes("UTF8");
				out.write(buff);
				out.flush();
				out.close();
				in = con.getInputStream();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return in;

	}