Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

不使用任何SDK实现Oauth授权并实现简单的发布微博功能:

$
0
0

创建一个Java项目,编写如下代码,具体过程代码中已写的很清楚,这里不再做解释:

注意先修改应用ID、应用密码和回调页面成你自己的!访问授权页面:

package com;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Scanner;

import javax.net.ssl.X509TrustManager;

/**
 * @author 刘显安
 * 不使用任何SDK实现新浪微博Oauth授权并实现发微薄小Demo
 * 日期:2012年11月11日
 */
public class Test
{
    static String clientId="2355065950";//你的应用ID
    static String clientSecret="72037e76bee00315691d9c30dd8a386a";//你的应用密码
    static String redirectUri="https://api.weibo.com/oauth2/default.html";//你在应用管理中心设置的回调页面
    
    public static void main(String[] args) throws Exception
    {
        testHttps();//测试
        //第一步:访问授权页面获取授权
        System.out.println("请打开你的浏览器,访问以下页面,登录你的微博账号并授权:");
        System.out.println("https://api.weibo.com/oauth2/authorize?client_id="+clientId+"&response_type=code&redirect_uri="+redirectUri+"&forcelogin=true");
        //第二步:获取AccessToken
        System.out.println("请将授权成功后的页面地址栏中的参数code:");
        String code=new Scanner(System.in).next();
        getAccessToken(code);
        //第三步:发布一条微博
        System.out.println("请输入上面返回的值中accessToken的值:");
        String accessToken=new Scanner(System.in).next();
        updateStatus("发布微博测试!来自WeiboDemo!", accessToken);
    }
    /**
     * 测试能否正常访问HTTPS打头的网站,
     */
    public static void testHttps()
    {
        try
        {
            trustAllHttpsCertificates();//设置信任所有的http证书
            URL url=new URL("https://api.weibo.com/oauth2/default.html");
            URLConnection con=url.openConnection();
            con.getInputStream();
            System.out.println("恭喜,访问HTTPS打头的网站正常!");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    /**
     * 以Post方式访问一个URL
     * @param url 要访问的URL
     * @param parameters URL后面“?”后面跟着的参数
     */
    public static void postUrl(String url,String parameters)
    {
        try
        {
            trustAllHttpsCertificates();//设置信任所有的http证书
            URLConnection conn = new URL(url).openConnection();
            conn.setDoOutput(true);// 这里是关键,表示我们要向链接里注入的参数
            OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());// 获得连接输出流
            out.write(parameters);
            out.flush();
            out.close();
            // 到这里已经完成了,开始打印返回的HTML代码
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line = null;
            while ((line = reader.readLine()) != null)
            {
                System.out.println(line);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    /**
     * 获取AccessToken
     * @param code 在授权页面返回的Code
     */
    public static void getAccessToken(String code)
    {
        String url="https://api.weibo.com/oauth2/access_token";
        String parameters="client_id=" +clientId+"&client_secret=" +clientSecret+
            "&grant_type=authorization_code" +"&redirect_uri=" +redirectUri+"&code="+code;
        postUrl(url, parameters);
    }
    /**
     * 利用刚获取的AccessToken发布一条微博
     * @param text 要发布的微博内容
     * @param accessToken 刚获取的AccessToken
     */
    public static void updateStatus(String text,String accessToken)
    {
        String url="https://api.weibo.com/2/statuses/update.json";
        String parameters="status="+text+"&access_token="+accessToken;
        postUrl(url, parameters);
        System.out.println("发布微博成功!");
    }
    /**
     * 设置信任所有的http证书(正常情况下访问https打头的网站会出现证书不信任相关错误,所以必须在访问前调用此方法)
     * @throws Exception
     */
    private static void trustAllHttpsCertificates() throws Exception
    {
        javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
        trustAllCerts[0] = new X509TrustManager()
        {
            @Override
            public X509Certificate[] getAcceptedIssuers()
            {
                return null;
            }
            @Override
            public void checkServerTrusted(X509Certificate[] arg0, String arg1)
                    throws CertificateException
            {}
            @Override
            public void checkClientTrusted(X509Certificate[] arg0, String arg1)
                    throws CertificateException
            {}
        };
        javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, null);
        javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    }
}

授权成功:




在你的控制台还需要下面的内容输入



再看你的新康微博一经发送成功

作者:liweifengwf 发表于2013-4-17 1:00:25 原文链接
阅读:149 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles