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

微博 https 请求协议

2016-03-25 11:17 435 查看
刚下手研究微博的认证,请求什么的,感觉也和我们一般的请求差不多的,原理一样一样的

最可惜的是我不懂web的(说这话时有个原因的,呜呜)

我们一般请求的时候用的是http开头的,但是微博是https的,这种请求更安全,可靠

String url = WEIBOSTR + "?"+ "client_id=XXXXX &&"+ "response_type=token&&" + "redirect_uri="+ XXXXX + "&&display=mobile";

上面的XXX是在微博开发的账号上获得的一些数据,是认证账号的,这里返回的是一个html格式的数据,

所以我们只能加载在webView上了,没办法,要是你看看html,会发现好多的valus都隐藏起来了

你打开微博认证的东西,你发现要是自己封装API也是可行的哦。里面有get和post请求,这里要注意的一点就是请求的协议不同于http

这里以get为例

:HttpGet httpGet = new HttpGet(url);

在一般http请求响应的是:httpResponse=new DefaultHttpClient().execute(httpGet);

但是这里要修改一下,其实,我也不懂有些原因的,我去SKD源码直接拿到的

我在这里贴出来:

httpResponse = (Net.getNewHttpClienta()).execute(httpGet);

public static HttpClient getNewHttpClienta() {
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);

SSLSocketFactory sf = new SSLSocketFactoryEx(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", sf, 443));

ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);

return new DefaultHttpClient(ccm, params);
} catch (Exception e) {
return new DefaultHttpClient();
}
}

其中还有对SSL协议的,这里要讲一下就是继承SSLSocketFactory,实现他,我觉得就是填上一些规则上来,

SSLSocketFactoryEx extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS");

public SSLSocketFactoryEx(KeyStore truststore)
throws NoSuchAlgorithmException, KeyManagementException,
KeyStoreException, UnrecoverableKeyException {
super(truststore);

TrustManager tm = new X509TrustManager() {

public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}

@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] chain, String authType)
throws java.security.cert.CertificateException {

}

@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] chain, String authType)
throws java.security.cert.CertificateException {

}
};

sslContext.init(null, new TrustManager[] { tm }, null);
}

@Override
public Socket createSocket(Socket socket, String host, int port,
boolean autoClose) throws IOException, UnknownHostException {
return sslContext.getSocketFactory().createSocket(socket, host, port,
autoClose);
}

@Override
public Socket createSocket() throws IOException {
return sslContext.getSocketFactory().createSocket();
}
}

就是这些东西了,这就是微博https的请求方法,重新设置和增加一些http的报头和消息机制。

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