static new ThreadLocal doPost_silently; static new ThreadLocal doPost_timeout; static new ThreadLocal doPost_extraHeaders; sS doPost(S url, Map urlParameters) { ret doPost(urlParameters, url); } sS doPost(Map urlParameters, S url) { ret doPost(makePostData(urlParameters), url); } static String doPost(S urlParameters, String url) ctex { URL _url = new URL(url); ping(); return doPost(urlParameters, _url.openConnection(), _url); } static String doPost(S urlParameters, URLConnection conn, URL url) ctex { bool silently = isTrue(optParam(doPost_silently)); Long timeout = optParam(doPost_timeout); SS extraHeaders = optPar(doPost_extraHeaders); setHeaders(conn); for (S key : keys(extraHeaders)) { ifdef doPost_debug print("doPost sending header: " + key + " = " + extraHeaders.get(key)); endifdef conn.setRequestProperty(key, extraHeaders.get(key)); } int l = lUtf8(urlParameters); if (!silently) print("Sending POST request: " + hideCredentials(url) + " (" + l + " bytes)"); // connect and do POST if (timeout != null) setURLConnectionTimeouts(conn, timeout); cast conn to HttpURLConnection; conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setFixedLengthStreamingMode(l); //conn.setRequestProperty("Content-Length", str(l)); OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); writer.write(urlParameters); writer.flush(); String contents = loadPage_utf8(conn, url, false); writer.close(); return contents; }