刚下手研究微博的认证,请求什么的,感觉也和我们一般的请求差不多的,原理一样一样的
最可惜的是我不懂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进行解释一遍