微博 https 请求协议

来源:互联网 发布:电脑报淘宝店怎么样 编辑:程序博客网 时间:2024/04/30 16:03
刚下手研究微博的认证,请求什么的,感觉也和我们一般的请求差不多的,原理一样一样的
最可惜的是我不懂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进行解释一遍

0 0