android開發--防止介面被抓包

johnchou發表於2021-09-09

最近在網上看看到很多抓包的教程,這裡先來分享一下關於抓包的教程,

  • 抓包教程

,關於這個教程我提醒一下[第二部]設定完成之後,一定要重啟Fiddler才可以

問題來了,作為一個android程式設計師,你的應用可能被抓包嗎?用上面的教程試一試吧..............?

從上面的抓包教程中,我們可以看到,抓包其實上是先設定一個本地的代理,然後在代理中記錄本網路中網路請求.

平時開發的時候自己封裝的網路框架一不小心,可能存在抓包的危險,如何避免呢........ 其實很簡單啦.百度一下就可以了, 嘻嘻..........

我用的是okhttp的請求,在請求新增如下程式碼

圖片描述

大神忽略以上以及以下內容 .................

給大家分享一下我的網路請求封裝------工具

/**
 * @author  新空
 * @time  2018/3/25/025 23:47
 * @week 星期日
 */class RetrofitManager : Interceptor {
    var mOkHttpClient: OkHttpClient? = null
    var url: String = ""
    var service: Api
    var retrofit: Retrofit? = null      //長快取有效期為7天
    val CACHE_STALE_LONG = "60 * 60 * 24 * 7"
    //查詢快取的Cache-Control設定,為if-only-cache時只查詢快取而不會請求伺服器,max-stale可以配合設定快取失效時間
    val CACHE_CONTROL_CACHE = "only-if-cached, max-stale=" + CACHE_STALE_LONG
    //查詢網路的Cache-Control設定,頭部Cache-Control設為max-age=0時則不會使用快取而請求伺服器
    val CACHE_CONTROL_NETWORK = "max-age=0"
    init {
        intOkHttp()
        service = Retrofit.Builder()
                .baseUrl(url)
                .client(mOkHttpClient)
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(CustomGsonConverterFactory.create())
                .build()
                .create(Api::class.java)
    }
    private fun intOkHttp() {
        val intercept = HttpLoggingInterceptor()
        intercept.level = HttpLoggingInterceptor.Level.BODY        if (mOkHttpClient == null) {            // val cach = Cache(File(MyApplication.getInstance().cacheDir, "File_Kotlin"), 14 * 1024 * 100)
            mOkHttpClient = OkHttpClient.Builder()
                    .retryOnConnectionFailure(true)
                    .addInterceptor(object : Interceptor {
                        override fun intercept(chain: Interceptor.Chain?): Response {
                            val header = chain!!.request().newBuilder()
                                    .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
                                    .addHeader("Connection", "keep-alive")
                                    .addHeader("Accept", "*/*")
                                    .addHeader("Cookie", "add cookies here")                                   return chain!!.proceed(header.build())
                        }

                    })
                    .proxy(Proxy.NO_PROXY)
                    .addInterceptor(intercept)
                    .connectTimeout(15, TimeUnit.SECONDS)
                    .build()
        }
    }

    companion object {
        fun builder(): RetrofitManager {            return RetrofitManager()
        }
       }
    override fun intercept(chain: Interceptor.Chain?): Response {
        val header = chain!!.request().newBuilder()
                .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
                .addHeader("Connection", "keep-alive")
                .addHeader("Accept", "*/*")
                .addHeader("Cookie", "add cookies here")          return chain!!.proceed(header.build())
}    //用T
        fun  toSubscribe(observable: Observable>, observer: Observer>) {
            observable.subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(observer)
        }
  • BaseHttps類如下,可以根據業務需求更改

/**
 * @author  新空
 * @time  2018/3/26/026 1:49
 * @week 星期一
 */class BaseHttps : Serializable {
    var code: Int = 0
    @SerializedName("msg")
    var message: String? = null
    var data: T? = null
}
  • APi介面如下

/**
 * Created by Administrator on 2018/3/15.
 */interface Api {  
    /**
     * 註冊
     */
    @FormUrlEncoded
    @POST("user/register")
    fun register(@FieldMap map: Map, @Field("sign") sign: String): Observable>
}
  • 使用方法

sign(map ) 對map進行簽名,需要後臺和前端統一

   var map = TreeMap()    map["phone"] = phone    map["password"] = password    map["code"] = code
    toSubscribe(RetrofitManager.builder().service.register(map, sign(map)), object : Observer> {
                        override fun onCompleted() {
                        }
                        override fun onNext(t: BaseHttps?) {                            if (t!!.code == 200) {
                                toast(t.message!!)
                                finish()
                            }
                        }
                        override fun onError(e: Throwable?) {                            if (e != null) {
                                toast("網路異常")
                                e.printStackTrace()
                            }
                        }
                    })

原文連結:http://www.apkbus.com/blog-632845-77475.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4422/viewspace-2811937/,如需轉載,請註明出處,否則將追究法律責任。

相關文章