I use two approaches to try using HTTPS URLs:
Old deprecated and returned answer with correct values.
Here is the code that you donât need to ignore the ssl certificate, it ignores it by itself or can use a different technique:
public String newApiPost(String url,String p1,String p2,String p3){ HttpClient httpClient = new DefaultHttpClient(); // replace with your url HttpPost httpPost = new HttpPost(url); //Post Data List<NameValuePair> nameValuePair = new ArrayList<NameValuePair> (); nameValuePair.add(new BasicNameValuePair("cliend_id",p1)); nameValuePair.add(new BasicNameValuePair("client_secret", p2)); nameValuePair.add(new BasicNameValuePair("key",p3)); //Encoding POST data try { httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair)); } catch (UnsupportedEncodingException e) { // log exception e.printStackTrace(); } //making POST request. try { HttpResponse response = httpClient.execute(httpPost); HttpEntity httpEntity = response.getEntity(); String result = EntityUtils.toString(httpEntity, HTTP.UTF_8); Log.d("response", result); // write response to log Log.d("zzuu", result.toString()); } catch (ClientProtocolException e) { // Log exception e.printStackTrace(); } catch (IOException e) { // Log exception e.printStackTrace(); Log.d("dddfg", e.toString()); }catch (Exception e){ Log.d("dddfg", e.toString()); } return ""; }
Then I used the deprecated HttpsUrlConnections method, which needs to ignore the ssl certificate, which I use repeatedly but did not work:
public void sendNew (String urls,String paramValue1,String paramValue2,String paramValue3){ URL url = null; BufferedReader reader = null; StringBuilder stringBuilder; String data=""; try { url = new URL(urls); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setReadTimeout(10000); conn.setConnectTimeout(15000); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/x-www-form- urlencoded"); conn.setRequestProperty("charset", "utf-8"); conn.setDoInput(true); conn.setDoOutput(true); Uri.Builder builder = new Uri.Builder() .appendQueryParameter("cliend_id", paramValue1) .appendQueryParameter("client_secret", paramValue2) .appendQueryParameter("apikey", paramValue3); String query = builder.build().getEncodedQuery(); OutputStream os = conn.getOutputStream(); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(os, "UTF-8")); writer.write(query); writer.flush(); writer.close(); os.close(); conn.connect(); reader = new BufferedReader(new InputStreamReader(conn.getErrorStream())); stringBuilder = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { stringBuilder.append(line + "\n"); } data= stringBuilder.toString(); Log.d("zzuu", data); } catch (MalformedURLException e) { e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); Log.d("dddfg", e.toString()); } catch (IOException e) { e.printStackTrace(); Log.d("dddfg", e.toString()); }catch (Exception e){ Log.d("dddfg", e.toString()); } }
He responds with this error:
10-12 17:06:06.135 16052-16075/ W/System.errīš java.io.IOException: Hostname 'xxxxxxxx' was not verified 10-12 17:06:06.139 16052-16075/ W/System.errīš at libcore.net.http.HttpConnection.verifySecureSocketHostname(HttpConnection.java:223) 10-12 17:06:06.139 16052-16075/ W/System.errīš at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:446) 10-12 17:06:06.139 16052-16075/ W/System.errīš at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 10-12 17:06:06.170 16052-16075/ W/System.errīš at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 10-12 17:06:06.171 16052-16075/ W/System.errīš at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292) 10-12 17:06:06.175 16052-16075/ W/System.errīš at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185) 10-12 17:06:06.175 16052-16075/ W/System.errīš at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271) 10-12 17:06:06.176 16052-16075/ W/System.errīš at ubicall.sand.ubicall.helper.JSONParser.method(JSONParser.java:422) 10-12 17:06:06.177 16052-16075/ W/System.errīš at ubicall.sand.ubicall.activity.SplashActivity$Access.doInBackground(SplashActivity.java:111) 10-12 17:06:06.177 16052-16075/ W/System.errīš at ubicall.sand.ubicall.activity.SplashActivity$Access.doInBackground(SplashActivity.java:106) 10-12 17:06:06.177 16052-16075/ W/System.errīš at android.os.AsyncTask$2.call(AsyncTask.java:287)
I did not understand when the problem is that it works well in restclient and postman data is sent to the url body using the mail method, I found that I need to ignore the ssl certificate when using HttpsURLConnection, but I try to ignore a lot, but it didnât work .
I use private void trustEveryone() { try { HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier(){ public boolean verify(String hostname, SSLSession session) { return true; }}); SSLContext context = SSLContext.getInstance("TLS"); context.init(null, new X509TrustManager[]{new X509TrustManager(){ public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {} public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {} public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }}}, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory( context.getSocketFactory()); } catch (Exception e) {