come utilizzare HttpsUrlConnection anziché DefaultHttpClient

DefaultHttpClient, ThreadSafeClientConnManager, HttpParams, HttpProtocolParams, SchemeRegistry, SSLSocketFactory, NameValuePair, HttpResponse sono obsoleti.

Ho provato ad usare HttpsUrlConnection ma ho confuso di loro.

  • API di Google Maps v3 in PhoneGap: i marcatori non disegnano correttamente dopo la mossa
  • Come resettare l'allarme se l'applicazione è chiusa in android
  • Seekbar o barra di progresso con più colors
  • HLS (http live streaming) su Android 3.0 e ricerca
  • come aggiungere tabhost in frammenti
  • Modificare il colore di margine della vista InfoWindow del marker nelle mappe Google api v2
  • protected Gson gson; private ThreadSafeClientConnManager threadSafeClientConnManager; private DefaultHttpClient client; AbstractServiceApi() { // sets up parameters HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, ENCODING); HttpConnectionParams.setConnectionTimeout(params, 95 * 1000); HttpConnectionParams.setSoTimeout(params, 95 * 1000); HttpConnectionParams.setStaleCheckingEnabled(params, false); params.setBooleanParameter("http.protocol.expect-continue", false); // registers schemes for both http and https SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); SSLSocketFactory sslSocketFactory = SSLSocketFactory.getSocketFactory(); sslSocketFactory.setHostnameVerifier(SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER); registry.register(new Scheme("https", sslSocketFactory, 443)); threadSafeClientConnManager = new ThreadSafeClientConnManager(params, registry); client = new DefaultHttpClient(threadSafeClientConnManager, params); gson = new Gson(); } 

    Non ho una libreria di chiavi. https://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html

      KeyStore keyStore = ...; String algorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(algorithm); tmf.init(keyStore); SSLContext context = SSLContext.getInstance("TLS"); context.init(null, tmf.getTrustManagers(), null); URL url = new URL("https://www.example.com/"); HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection(); urlConnection.setSSLSocketFactory(context.getSocketFactory()); InputStream in = urlConnection.getInputStream(); 

    qualcuno potrebbe aiutarmi?

  • i semplici dubbi di molteplici spinner
  • Gestione di grandi bitmap
  • La camera Android prodotta dovrebbe essere ruotata dopo la cattura?
  • Servizi di Google Play sull'emulatore Genymotion con Android 7
  • Come posso visualizzare il mio tipo di account personalizzato nell'applicazione per i contatti Android?
  • HttpUrlConnection.openConnection non riesce la seconda volta
  • 4 Solutions collect form web for “come utilizzare HttpsUrlConnection anziché DefaultHttpClient”

    Questa è la mia soluzione.

     private HttpsURLConnection urlConnection; private CookieManager cookieManager; private HttpsURLConnection getConnection(String url) throws MalformsdURLException { URL request_url = new URL(url); try { if (!isHttps()) { throw new ConnectException("you have to use SSL certifacated url!"); } urlConnection = (HttpsURLConnection) request_url.openConnection(); urlConnection.setRequestMethod("POST"); urlConnection.setReadTimeout(95 * 1000); urlConnection.setConnectTimeout(95 * 1000); urlConnection.setDoInput(true); urlConnection.setRequestProperty("Accept", "application/json"); urlConnection.setRequestProperty("X-Environment", "android"); /** Cookie Sets... */ String cookie = cookieManager.getCookie(urlConnection.getURL().toString()); cookieManager = CookieManager.getInstance(); if (cookie != null) urlConnection.setRequestProperty("Cookie", cookie); List<String> cookieList = urlConnection.getHeaderFields().get("Set-Cookie"); if (cookieList != null) { for (String cookieTemp : cookieList) { cookieManager.setCookie(urlConnection.getURL().toString(), cookieTemp); } } /** Cookie Sets... */ urlConnection.setHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { /** if it necessarry get url verfication */ //return HttpsURLConnection.getDefaultHostnameVerifier().verify("your_domain.com", session); return true; } }); urlConnection.setSSLSocketFactory((SSLSocketFactory) SSLSocketFactory.getDefault()); urlConnection.connect(); } catch (IOException e) { e.printStackTrace(); } return urlConnection; } 

    È ansible utilizzare la comunicazione https utilizzando HttpURLConnection ( http://developer.android.com/reference/java/net/HttpURLConnection.html )

    Come mi rendo conto di comunicare con il server web con il certificato ben noto. In questo caso apparirà:

      public static final int CONNECTON_TIMEOUT_MILLISECONDS = 60000; public static String executeGetHttpRequest(final String path) throws ClientProtocolException, IOException { String result = null; HttpURLConnection urlConnection = null; try { URL url = new URL(path); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setConnectTimeout(CONNECTON_TIMEOUT_MILLISECONDS); urlConnection.setReadTimeout(CONNECTON_TIMEOUT_MILLISECONDS); result = readStream(urlConnection.getInputStream()); } finally { if (urlConnection != null) { urlConnection.disconnect(); } } return result; } private static String readStream(InputStream is) throws IOException { final BufferedReader reader = new BufferedReader(new InputStreamReader(is, Charset.forName("US-ASCII"))); StringBuilder total = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { total.append(line); } if (reader != null) { reader.close(); } return total.toString(); } 

    E 'un campione di lavoro. Potresti esaminare questo buon articolo where descrivere diversi casi – http://developer.android.com/training/articles/security-ssl.html

    Per HttpsUrlConnection puoi fare riferimento al mio seguente codice di esempio:

      private TrustManager[] getWrappedTrustManagers(TrustManager[] trustManagers) { final X509TrustManager originalTrustManager = (X509TrustManager) trustManagers[0]; return new TrustManager[]{ new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return originalTrustManager.getAcceptedIssuers(); } public void checkClientTrusted(X509Certificate[] certs, String authType) { try { originalTrustManager.checkClientTrusted(certs, authType); } catch (CertificateException ignored) { } } public void checkServerTrusted(X509Certificate[] certs, String authType) { try { originalTrustManager.checkServerTrusted(certs, authType); } catch (CertificateException ignored) { } } } }; } private SSLSocketFactory getSSLSocketFactory() { try { CertificateFactory cf = CertificateFactory.getInstance("X.509"); InputStream caInput = getResources().openRawResource(R.raw.your_cert); Certificate ca = cf.generateCertificate(caInput); caInput.close(); KeyStore keyStore = KeyStore.getInstance("BKS"); keyStore.load(null, null); keyStore.setCertificateEntry("ca", ca); String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(keyStore); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, getWrappedTrustManagers(tmf.getTrustManagers()), null); return sslContext.getSocketFactory(); } catch (Exception e) { return HttpsURLConnection.getDefaultSSLSocketFactory(); } } private class GETRequest extends AsyncTask<Void, Void, String> { @Override protected String doInBackground(Void... params) { try { URL url = new URL("https://your_server_url"); String token = "rbkY34HnL..."; HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection(); urlConnection.setSSLSocketFactory(getSSLSocketFactory()); urlConnection.setHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { // return true; HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier(); return hv.verify("your_domain.com", session); } }); urlConnection.setRequestProperty("Authorization", "Bearer " + token); urlConnection.connect(); InputStream inputStream; if (urlConnection.getResponseCode() != HttpURLConnection.HTTP_OK) { inputStream = urlConnection.getErrorStream(); } else { inputStream = urlConnection.getInputStream(); } return String.valueOf(urlConnection.getResponseCode()) + " " + urlConnection.getResponseMessage() + "\r\n" + parseStream(inputStream); } catch (Exception e) { return e.toString(); } } @Override protected void onPostExecute(String response) { super.onPostExecute(response); // do something... } } 

    Spero che sia d'aiuto!

    È ansible utilizzare HttpURLConnection in questo modo

     URL url = new URL(urlString); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.connect(); // Read the input stream into a String InputStream inputStream = urlConnection.getInputStream(); StringBuffer buffer = new StringBuffer(); if (inputStream == null) { // Nothing to do. return null; } BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = reader.readLine()) != null) { buffer.append(line + "\n"); } if (buffer.length() == 0) { return null; } String stringResult = buffer.toString(); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.