Send HTTPS Post Request to the server

后端 未结 2 1518
离开以前
离开以前 2020-12-13 02:59

This is my HTTP JSON

 {  
 \"User\": {    
    \"Name\": \"Compulsary\",\"Password\": \"Compulsary\"  }
}

Which I have to post to the serve

相关标签:
2条回答
  • 2020-12-13 03:48

    Step 1: Create a class MySSLSocketFactory and include below code:

    public class MySSLSocketFactory extends SSLSocketFactory {
        SSLContext sslContext = SSLContext.getInstance("TLS");
    
        public MySSLSocketFactory(KeyStore truststore)
                        throws NoSuchAlgorithmException, KeyManagementException,
                        KeyStoreException, UnrecoverableKeyException {
                super(truststore);
    
                TrustManager tm = new X509TrustManager() {
                        public void checkClientTrusted(X509Certificate[] chain,
                                        String authType) throws CertificateException {
                        }
    
                        public void checkServerTrusted(X509Certificate[] chain,
                                        String authType) throws CertificateException {
                        }
    
                        public X509Certificate[] getAcceptedIssuers() {
                                return null;
                        }
                };
    
                sslContext.init(null, new TrustManager[] { tm }, null);
        }
    
        @Override
        public Socket createSocket(Socket socket, String host, int port,
                        boolean autoClose) throws IOException, UnknownHostException {
                return sslContext.getSocketFactory().createSocket(socket, host, port,
                                autoClose);
        }
    
        @Override
        public Socket createSocket() throws IOException {
                return sslContext.getSocketFactory().createSocket();
        }
    
    }
    

    Step 2: Create a class WebClientDevWrapper and include the below code:

    public class WebClientDevWrapper {
    
        public static HttpClient getNewHttpClient() {
             try {
                 KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
                 trustStore.load(null, null);
    
                 SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
                 sf.setHostnameVerifier(
                        SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
    
                 HttpParams params = new BasicHttpParams();
                 HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
                 HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
    
                 SchemeRegistry registry = new SchemeRegistry();
                 registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
                 registry.register(new Scheme("https", sf, 443));
    
                 ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
    
                 return new DefaultHttpClient(ccm, params);
             } catch (Exception e) {
                 return new DefaultHttpClient();
             }
         }
    
    }
    

    Step 3: Create a method inside your Activity or elsewhere, this method is going to be used for making a web call.

    /**
         * Request JSON based web service to get response
         * 
         * @param url
         *            - base URL
         * @param request
         *            - JSON request
         * @return response
         * @throws ClientProtocolException
         * @throws IOException
         * @throws IllegalStateException
         * @throws JSONException
         */
        public HttpResponse request(String url, JSONObject request)
                throws ClientProtocolException, IOException, IllegalStateException,
                JSONException {
    
            DefaultHttpClient client = (DefaultHttpClient) WebClientDevWrapper.getNewHttpClient();
    
                HttpPost post = new HttpPost(url);
                post.setEntity(new StringEntity(request.toString(), "utf-8"));
                HttpResponse response = client.execute(post);
                return response;
            }
        }
    

    Step 4: Call a method and get response.

    0 讨论(0)
  • 2020-12-13 03:48

    i am using the following codes for the combination of https/http/wift/3G , hope it helps

    public class CustomHttpClient {
    private static DefaultHttpClient customHttpClient;
    
    /** A private Constructor prevents instantiation */
    private CustomHttpClient() {
    }
    
    public static synchronized DefaultHttpClient getHttpClient() {
        if (customHttpClient == null) {
            HttpParams params = new BasicHttpParams();
            HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
            HttpProtocolParams.setContentCharset(params,
                    HTTP.DEFAULT_CONTENT_CHARSET);
            HttpProtocolParams.setUseExpectContinue(params, true);
            HttpProtocolParams.setUserAgent(params, "Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; Nexus One Build/FRG83) AppleWebKit/533.1(KHTML, like Gecko) Version/4.0 Mobile Safari/533.1");
            ConnManagerParams.setTimeout(params, 1000);
            HttpConnectionParams.setConnectionTimeout(params, 5000);
            HttpConnectionParams.setSoTimeout(params, 10000);
            SchemeRegistry schReg = new SchemeRegistry();
            schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
            schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
            ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params,schReg);
            customHttpClient = new DefaultHttpClient(conMgr, params);
        }
        return customHttpClient;
    }
    
    public Object clone() throws CloneNotSupportedException {
        throw new CloneNotSupportedException();
    }
    

    }

    and the sample

    public static String Call(String URL, List<NameValuePair> postParameters)
    {
        BufferedReader in = null;
        DefaultHttpClient httpClient;
        StringBuffer sb = new StringBuffer();   
        try{
            httpClient = CustomHttpClient.getHttpClient();
    
            HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), false); //making 3G network works*
            HttpPost request = new HttpPost(URL);
            UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
            request.setEntity(formEntity);
            HttpResponse response = httpClient.execute(request);
            in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            String line = "";
            String NL = System.getProperty("line.separator");
            while ((line = in.readLine()) != null) {
            sb.append(line + NL);
            }
            in.close();
    
        }catch(Exception ex)
        {
            ex.printStackTrace();
    
        }
        return sb.toString();
    }
    
    0 讨论(0)
提交回复
热议问题