您的位置:首页 > 理论基础 > 计算机网络

okhttp网络框架的https协议之忽略证书验证的登录实例

2017-05-17 13:23 686 查看
这是一个小小的登录案例是基于https的小demo,希望可以对各位同胞有所帮助!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

下面上代码

首先是一个工具类多一些功能进行了封装

public class HttpUtils {

OkHttpClient client = getUnsafeOkHttpClient();
public static final MediaType JSON
= MediaType.parse("application/json; charset=utf-8");

public String login(String url, String json) throws IOException {
//把请求的内容字符串转换为json
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();

Response response = client.newCall(request).execute();

String result = response.body().string();

return result;

}

public String bolwingJson(String username, String password) {
return "{'username':" + username + "," + "'password':" + password + "}";

}

public static OkHttpClient getUnsafeOkHttpClient() {

try {

final TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) {
}

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

@Override
public X509Certificate[] getAcceptedIssuers() {
X509Certificate[] x509Certificates = new X509Certificate[0];
return x509Certificates;
}

}};

final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts,
new java.security.SecureRandom());

OkHttpClient okHttpClient = new OkHttpClient.Builder()
.sslSocketFactory(sslContext.getSocketFactory())
.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
) .build(); return okHttpClient; } catch (Exception e) { throw new RuntimeException(e); } }}

主代码如下

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG ="MainActivity" ;
//用户名
private EditText mEtUsername;
//密码
private EditText mEtPwd;
//登录按键
private Button mBtnLogin;

private String url ="https://i171635h39.51mypc.cn:35689/jeesite/a/login";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initView();
initListener();
}

/**
* 初始化组件
*/
private void initView() {

mEtUsername = (EditText) findViewById(R.id.login_edit_account);
mEtPwd = (EditText) findViewById(R.id.login_edit_pwd);

mBtnLogin = (Button) findViewById(R.id.login_btn_login);

}

/**
* 设置监听器
*/
private void initListener() {

mBtnLogin.setOnClickListener(this);

}

/*
单击事件监听
*/
@Override
public void onClick(View v) {
if(v==mBtnLogin){
login();
}
}

/*
登录
*/
private void login() {

final String username = mEtUsername.getText().toString().trim();
final String password = mEtPwd.getText().toString().trim();

if(TextUtils.isEmpty(username) || TextUtils.isEmpty(password)){

Toast.makeText(MainActivity.this, "用户名或者密码不能为空", Toast.LENGTH_SHORT).show();
return;
}

new Thread(){
@Override
public void run() {

HttpUtils httpUtils = new HttpUtils();
//转换为JSON
String user = httpUtils.bolwingJson(username, password);

//String user ="{'username':" + username + ","+"'password':"+password+"}";

Log.d(TAG, "user:" + user);

try {
final String result = httpUtils.login(url, user);

Log.d(TAG, "结果:" + result);
//更新UI,在UI线程中
runOnUiThread(new Runnable() {
@Override
public void run() {
if("SUCCESS".equals(result)){

Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();

}else{
Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
}
}
});
} catch (IOException e) {
e.printStackTrace();
}

}
}.start();

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: