Behrad Ravanbod

HTTPS Request در برنامه نویسی اندروید

1 ارسال در این موضوع قرار دارد

ارسال شده در (ویرایش شده)

با عرض سلام خدمت تمامی دوستان.

در این آموزش ساده میخوام که بهتون بگم چطور یک HTTPS Request ارسال کنید.
ارسال درخواست معمولی http کار راحتیه و مشکلی نداره اما اگه سعی کرده باشید به یک سرور یا url که https هستش درخواست بفرستین،مشکل و ارور های عجیبی ببینید.ارور های مثل Certificate یا ...

راه حل خیلی ساده ای داره.

من تو یک خط بگم چطوری یک SSL رایگان برای سرور بگیرید.اگه گرفتین که مستقیم برید بقیه آموزش و اگر قصد افزایش امنیت رو دارید و میخواین برای سرور یک SSL راه بندازید خیلی ساده از سایت http://sslforfree.com استفاده کنید همه چی حله.

فرض میگیریم الان SSL سرور شما راه افتاده و میخواید همچین درخواستی ایجاد کنید.

یک کلاس که extends شده باشه از Application در پروژه خودتون ایجاد کنید.مثلا به اسم Init.java

یک کلاس هم به نام NukeAllSslCerts بسازید.سورس این کلاس هم میتونه سورس زیر باشه!

package com.example.myapp;

import java.security.SecureRandom;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;


public class NukeSSLCerts {
    protected static final String TAG = "NukeSSLCerts";

    public static void nuke() {
        try {
            TrustManager[] trustAllCerts = new TrustManager[] {
                    new X509TrustManager() {
                        public X509Certificate[] getAcceptedIssuers() {
                            X509Certificate[] myTrustedAnchors = new X509Certificate[0];
                            return myTrustedAnchors;
                        }

                        @Override
                        public void checkClientTrusted(X509Certificate[] certs, String authType) {}

                        @Override
                        public void checkServerTrusted(X509Certificate[] certs, String authType) {}
                    }
            };

            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
            HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String arg0, SSLSession arg1) {
                    return true;
                }
            });
        } catch (Exception e) {
        }
    }
}

 

خب،حالا در اون فایل init.class که ساختین،دستور زیر رو در تابع OnCreate اجرا کنید.

new NukeSSLCerts().nuke();

یک روش دیگه هم هست که باید برای هر درخواست دستور allowSSl رو اجرا کنید که بیخیال :| با این خیلی ساده تمام درخواست هارو به اصطلاح Nuke میکنه و مشکل حله.

حالا اگه میخاین یک درخواست http و به کمک این آموزش هم یک درخواست https به بهترین شکل بفرستین با استفاده از volley،اینجا کلیک کنید.

توجه کنید که volley در حالت عادی از SSL پشتیبانی نمی کنه ها!!اما با همین Nuke میتونید این قابلیت رو بهش اضافه کنید.

 

امید وارم تونسته باشم سوال خیلی از دوستان رو پاسخ داده باشم.اگر تونستم،برای سلامتی پدر و مادرم دعا کنید با تشکر :heart:

ویرایش شده در توسط Behrad Ravanbod
1 کاربر پسند دیده است

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری