classLogin(){ var cookieStore = HashMap<String, List<Cookie>?>() val logUrl = "https://www.login.com"//登录url val myManage = "https://www.logined.com"//登录以后可以访问的URL val client = OkHttpClient.Builder().cookieJar( object : CookieJar { overridefunsaveFromResponse(httpUrl: HttpUrl, list: List<Cookie>) { //保存Cookie,主线程要用来同步cookie cookieStore[httpUrl.host()] = list } overridefunloadForRequest(httpUrl: HttpUrl): List<Cookie> { val cookies = cookieStore[httpUrl.host()] return cookies ?: ArrayList() } }).build() //初始化请求
funmyLogin(user: String, pw: String, hand: Handler) { val isFailLogin = Regex(".*bad.*")//判断是否成功 val isSuccLogin= Regex(".*ok.*")//判断是否成功 var res = "" if (user.isNotEmpty() && pw.isNotEmpty()) { //在主线程中开启一个网络线程
thread { //发送参数 val myinfo = FormBody.Builder() .add("admin_name", user) .add("admin_pass", pw) .build() //构建请求 var request = Request.Builder().url(this.logUrl).post(myinfo).build() var response = this.client.newCall(request).enqueue(object : Callback {//这里用的enqueue有个回调方法,重写可以实现检测请求失败的情况 overridefunonResponse(call: Call, response: Response) { var res = response.body()?.string()//这里string()一定不要使用第二次,比如,如果又用了一次打印xx.string(),就会崩溃! Log.d("here",res) //if(res!!.contains(isSuccLogin)){//自定判断登录,用regex检查或别的。。 var msg = Message() msg.what = 1//判断登录,假设1登录ok hand.sendMessage(msg)//发送消息到UI线程 }