/** * Opens an {@link HttpURLConnection} with parameters. * * @param request * @param listener * @return an open connection * @throws IOException */ private HttpURLConnection openConnection(WXRequest request, OnHttpListener listener) throws IOException { URL url = new URL(request.url); HttpURLConnection connection = createConnection(url); connection.setConnectTimeout(request.timeoutMs); connection.setReadTimeout(request.timeoutMs); connection.setUseCaches(false); connection.setDoInput(true); if (request.paramMap != null) { Set<String> keySets = request.paramMap.keySet(); for (String key : keySets) { connection.addRequestProperty(key, request.paramMap.get(key)); } } if ("POST".equals(request.method)) { connection.setRequestMethod("POST"); if (request.body != null) { if (listener != null) { listener.onHttpUploadProgress(0); } connection.setDoOutput(true); DataOutputStream out = new DataOutputStream(connection.getOutputStream()); // TODO big stream will cause OOM; Progress callback is meaningless out.write(request.body.getBytes()); out.close(); if (listener != null) { listener.onHttpUploadProgress(100); } } } else if (!TextUtils.isEmpty(request.method)) { connection.setRequestMethod(request.method); } else { connection.setRequestMethod("GET"); } return connection; }