مشکل در ارتباط HTTPS با رتروفیت
با سلام و وقت بخیر
من از رتروفیت برای اتصال به سرور استفاده می کنم.
برای ارتباط از کد زیر استفاده کردم.
public static Retrofit getClient() { if (retrofit == null) { retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); } return retrofit; }
در اندروید 5 و بالاتر مشکلی در اتصال نیست و پایین تر متصل نمیشه برای اندروید 4.4 خطای Handshake میده و برای پایین تر از 4.4 هیچ خطایی هم نمیده.
روش این لینک و چندین مورد دیگر امتحان کردم جواب نداد.
https://answers.uncox.com/android/question/29006/%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%A8%D8%A7-https-%D8%AF%D8%B1-%D9%86%D8%B3%D8%AE%D9%87-%D9%87%D8%A7%DB%8C-%D9%BE%D8%A7%DB%8C%DB%8C%D9%86-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF
https://stackoverflow.com/questions/53767097/my-app-dont-work-with-self-signed-ssl-in-android-5
در لینک بالا گفتن که باید از کانفیگ آپاچی TLS درس بشه که هاستینگ به دلیل اشتراکی بودن این کار را نمی کند!
لطفا یک راه حل بفرمایید.ممنون تشکر
سلام توی header برای تمامی requestهایی که دارین یه User-Agent بزارین تست کنین
val gsonFactory = GsonConverterFactory.create()
val httpClient = OkHttpClient.Builder()
val logging = HttpLoggingInterceptor()
logging.level = HttpLoggingInterceptor.Level.BODY
httpClient.addInterceptor(logging)
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.addNetworkInterceptor { chain ->
chain.proceed(
chain.request()
.newBuilder()
.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0")
.build()
)
}
builder = Retrofit.Builder()
.baseUrl(baseUrl)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(gsonFactory)
.client(httpClient.build())
retrofit = builder.build()
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .