<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    月掛夜中央

    懶惰程序員

    常用鏈接

    統計

    最新評論

    網易微博的OAUTH認證開發(java版)

        網易微博最近也開放了它的開發平臺http://open.t.163.com,其中java版的oauth認證和新浪微博的很類似(貌似都是從twitter那邊copy過來的)。但說句實話,網易java版的sdk和新浪微博的比起來,的確上手比較麻煩,里面提供的example都是把access token寫死,作為參數,具體的代碼如下:
    public static void main(String[] args){
            
            System.setProperty(
    "tblog4j.oauth.consumerKey""EJ0GpH9mtU584qtY");
            System.setProperty(
    "tblog4j.oauth.consumerSecret""EgIdvwgF6UXc6WMZs6jTv5ivZcNVDvnT");
            
            TBlog tblog 
    = new TBlog();
            
            tblog.setToken(
    "46f29fb418bdb14044bf39d2cad49f81""f0c81ad9783f1s427da38312c0cc910c");
            
            
    try {
                
                tblog.updateStatus(
    "update status from Java SDK");
                
            }
     catch (TBlogException e) {
                e.printStackTrace();
            }

        }
    完全沒有體現出oauth的完整認證過程,access token(就是46f29fb418bdb14044bf39d2cad49f81,f0c81ad9783f1s427da38312c0cc910c"兩段字符串)是怎么來的,完全沒有演示的過程,搞得我做這個開發的時候只能摸黑,其實oauth的完整過程是這樣的:
    OAuth流程圖

    OAuth流程圖

    • A:消費方請求Request Token
    • B:服務提供者授權Request Token
    • C:消費方定向用戶到服務提供者
    • D:獲得用戶授權后,服務提供者定向用戶到消費方
    • E:消費方請求Access Token
    • F:服務提供者授權Access Token
    • G:消費方訪問受保護的資源

    具體的請去圍觀這篇文章http://huoding.com/2010/10/10/8.

    由于開發受阻,只好求助它的兄弟sdk,那就是新浪微博的sdk,但兩者雖然相似度很高,但到底在細節處還是有所不同,下面就是我仿造新浪微博網頁oauth認證的網易版。
    這個過程首先是要在網易開發平臺申請消費者開發的key和secret字符串,誰都可以去上面的網易開發平臺申請:申請到的畫面如下:


    然后就可以構造一個jsp的頁面,這個頁面就是調用oauth認證的,我這個jsp叫call.jsp,具體的jsp代碼如下:

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding
    ="ISO-8859-1"%>
    <%@ page language="java" import="t4j.*" %>
    <%@ page language="java" import="t4j.http.*" %>    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <%
    System.setProperty(
    "tblog4j.oauth.consumerKey""EJ0GpH9mtU123xxx");
    System.setProperty(
    "tblog4j.oauth.consumerSecret""EgIdvwgF6UXc6WMZs6jTv5ivZcxxxxxx");

    TBlog tblog 
    = new TBlog();
    try {
        RequestToken requestToken 
    = tblog.getOAuthRequestToken();
        session.setAttribute(
    "requestToken",requestToken);
        String url 
    = "http://api.t.163.com/oauth/authenticate?oauth_token="+requestToken.getToken()+"&oauth_token_secret="+requestToken.getTokenSecret()+"&oauth_callback=http%3A%2F%2Flocalhost%3A8080%2F163%2Fcallback.jsp";
        
        response.sendRedirect(url);
    }
     catch (TBlogException e1) {
        
    // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    %>
    </body>
    </html>
    這個頁面就是把申請來的consumerKey和consumerSecret傳到一個TBlog對象,這個對象就是網易微博的接口對象了,所有oauth認證以及網易微博的操作api都在這個類中。傳遞過去后就能夠得到request token,同時把requestToken存到session里面,方便后面的頁面使用。接下來就是oauth的認證了,需要把requestToken和requestTokenSecret(兩個字符串,在requestToken對象中)傳遞到網易的授權頁面,記得帶上oauth_callback參數,這個參數是通過認證后網易回調的頁面,說明白一點,就是通過認證了,網易就會自己跳回到你oauth_callback里面傳遞的這個頁面。然后就跳到網易的認證頁面了。

    需要輸入網易通行證的用戶名和密碼,登錄后就到了認證的頁面了

    點擊允許后,就會跳回到oauth_callback參數傳遞的頁面,我這個頁面就是callback.jsp,代碼如下:
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding
    ="ISO-8859-1"%>
    <%@ page language="java" import="t4j.*" %>
    <%@ page language="java" import="t4j.http.*" %>    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <%
    RequestToken requestToken 
    = (RequestToken)session.getAttribute("requestToken");
    TBlog tblog 
    = new TBlog();
    AccessToken token 
    = tblog.getOAuthAccessToken(requestToken);
    tblog.setToken(token.getToken(),token.getTokenSecret());

    try {
        
        out.println(tblog.updateStatus(
    "update status from Java SDK").getId());
        
    }
     catch (TBlogException e) {
        e.printStackTrace();
    }


    %>

    </body>
    </html>
    在這個頁面就可以去到通過了認證的AccessToken,有了這個,就算是通過了oauth認證,可以操作網易微博的各種資源了。requestToken存在session的意義就是為了在這個頁面可以去到,并根據這個requestToken得到AccessToken,如果不經過網易的那個認證頁面,直接用requestToken是得不到AccessToken(是的,我試過了直接取,沒用的)。上面updateStaus就是發一條微博到網易去。
    本來到這邊就算完成了,但是如果我們需要通過接口搜索網易微博的內容時,比如這樣:
    List<Status> list = tblog.searchStatus("情人節");
    那么你遇到的就是像一個人的情人節那樣可恥的失敗,當然上面如果是英語,是不會有問題的,但中文(中國程序員滿臉都是淚,心里都是苦),錯誤代碼是這樣的:
    [Wed Feb 16 21:15:25 CST 2011]Request: 
    [Wed Feb 
    16 21:15:25 CST 2011]GET http://api.t.163.com/search.json?q=情人節
    [Wed Feb 16 21:15:25 CST 2011]OAuth base string:GET&http%3A%2F%2Fapi.t.163.com%2Fsearch.json&oauth_consumer_key%3DEJ0GpH9mtU584qtY%26oauth_nonce%3D1981498615%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1297862125%26oauth_token%3D3d5ec3c98e57d20c40c458bfe6999d66%26oauth_version%3D1.0%26q%3D%25E6%2583%2585%25E4%25BA%25BA%25E8%258A%2582
    [Wed Feb 
    16 21:15:25 CST 2011]OAuth signature:XMJW2PnNi1TuL1kSkiwCmBbSejA=
    [Wed Feb 
    16 21:15:25 CST 2011]Authorization: OAuth oauth_consumer_key="EJ0GpH9mtU584qtY",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1297862125",oauth_nonce="1981498615",oauth_version="1.0",oauth_token="3d5ec3c98e57d20c40c458bfe6999d66",oauth_signature="XMJW2PnNi1TuL1kSkiwCmBbSejA%3D"
    [Wed Feb 
    16 21:15:25 CST 2011]TBlog-Client-URL: http://open.t.163.com
    [Wed Feb 16 21:15:25 CST 2011]Accept-Encoding: gzip
    [Wed Feb 
    16 21:15:25 CST 2011]User-Agent: tblog4j http://open.t.163.com
    [Wed Feb 16 21:15:25 CST 2011]TBlog-Client-Version: 1.0
    t4j.TBlogException: 
    401:Authentication credentials were missing or incorrect.
    {"request":"/search.json?q=?é????","error":"oauth_signature=XMJW2PnNi1TuL1kSkiwCmBbSejA= oauth_signature_base_string=GET&http%3A%2F%2Fapi.t.163.com%2Fsearch.json&oauth_consumer_key%3DEJ0GpH9mtU584qtY%26oauth_nonce%3D1981498615%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1297862125%26oauth_token%3D3d5ec3c98e57d20c40c458bfe6999d66%26oauth_version%3D1.0 oauth_problem=signature_invalid oauth_signature_method=HMAC-SHA1","error_code":"401"}

        at t4j.http.HttpClient.httpRequest(HttpClient.java:
    572)
    [Wed Feb 
    16 21:15:25 CST 2011]Response: 
    [Wed Feb 
    16 21:15:25 CST 2011]HTTP/1.1 401 Unauthorized
    [Wed Feb 
    16 21:15:25 CST 2011]Content-Language: 
    [Wed Feb 
    16 21:15:25 CST 2011]Date: Wed, 16 Feb 2011 13:15:33 GMT
    [Wed Feb 
    16 21:15:25 CST 2011]Transfer-Encoding: chunked
    [Wed Feb 
    16 21:15:25 CST 2011]Expires: Thu, 01 Jan 1970 00:00:00 GMT
    [Wed Feb 
    16 21:15:25 CST 2011]Content-Type: application/json;charset=utf-8
    [Wed Feb 
    16 21:15:25 CST 2011]Connection: keep-alive
    [Wed Feb 
    16 21:15:25 CST 2011]Server: nginx
    [Wed Feb 
    16 21:15:25 CST 2011]Pragma: no-cache
    [Wed Feb 
    16 21:15:25 CST 2011]Cache-Control: no-cache, no-store, max-age=0
    [Wed Feb 
    16 21:15:25 CST 2011]{"request":"/search.json?q=?é????","error":"oauth_signature=XMJW2PnNi1TuL1kSkiwCmBbSejA= oauth_signature_base_string=GET&http%3A%2F%2Fapi.t.163.com%2Fsearch.json&oauth_consumer_key%3DEJ0GpH9mtU584qtY%26oauth_nonce%3D1981498615%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1297862125%26oauth_token%3D3d5ec3c98e57d20c40c458bfe6999d66%26oauth_version%3D1.0 oauth_problem=signature_invalid oauth_signature_method=HMAC-SHA1","error_code":"401"}

        at t4j.http.HttpClient.httpRequest(HttpClient.java:
    514)
        at t4j.http.HttpClient.get(HttpClient.java:
    497)
        at t4j.TBlog.get(TBlog.java:
    949)
        at t4j.TBlog.searchStatus(TBlog.java:
    773)
        at _jsp._callback__jsp._jspService(_callback__jsp.java:
    46)
        at com.caucho.jsp.JavaPage.service(JavaPage.java:
    61)
        at com.caucho.jsp.Page.pageservice(Page.java:
    578)
        at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:
    195)
        at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:
    187)
        at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:
    265)
        at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:
    273)
        at com.caucho.server.port.TcpConnection.run(TcpConnection.java:
    682)
        at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:
    743)
        at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:
    662)
        at java.lang.Thread.run(Thread.java:
    662)
    上面的提示是你的認證沒通過,其實完全不是這么回事,你只要把那個搜索語句改一下就得了:
    List<Status> list = tblog.searchStatus(java.net.URLEncoder.encode("情人節","UTF-8"));
    到此,真的就都OK了,真的希望網易做事能徹底些,這些事其實如果有個好的例子,我也不用摸黑搞了兩天。
    完整的開發程序的地址在這里:http://dl.dbank.com/c035vpc4d4


    我的微博 http://t.sina.com.cn/1401900445

    posted on 2011-02-16 21:31 月掛夜中央 閱讀(6301) 評論(6)  編輯  收藏 所屬分類: java咖啡杯

    評論

    # re: 網易微博的OAUTH認證開發(java版) 2011-02-17 01:22 http://www.zjsx0575.com

    http://www.zjsx0575.com  回復  更多評論   

    # re: 網易微博的OAUTH認證開發(java版) 2011-02-17 22:34 玄幻小說吧

    上面的提示是你的認證沒通過,其實完全不是這么回事,你只要把那個搜索語句改一下就得了  回復  更多評論   

    # re: 網易微博的OAUTH認證開發(java版) 2011-02-20 17:02 淘寶商城

    網易的微博做得是挺不錯,但是娛樂性上不如新浪,上不如騰訊。。。很為其擔憂。  回復  更多評論   

    # re: 網易微博的OAUTH認證開發(java版) 2011-02-20 19:30 XU

    參數最好都使用java.net.URLEncoder.encode轉碼一下,因為有些特殊字符也需要轉。
    新浪微博、騰訊微博、網易微博這幾家的java客戶端程序代碼都是抄過來抄過去的。就API穩定性來說,還是網易微博較為給力,可能是用的人少吧。  回復  更多評論   

    # re: 網易微博的OAUTH認證開發(java版) 2011-07-28 17:30 zsz

    在回調地址那里跟新浪有點不一樣,看了你的文章才通過的,頂一個  回復  更多評論   

    # re: 網易微博的OAUTH認證開發(java版) 2011-09-22 10:49 weilong_5211314@163.com

    System.setProperty("tblog4j.oauth.consumerKey", "EJ0GpH9mtU584qtY");
    System.setProperty("tblog4j.oauth.consumerSecret", "EgIdvwgF6UXc6WMZs6jTv5ivZcNVDvnT");


    這里的key 、Secret 要怎么申請?  回復  更多評論   

    主站蜘蛛池模板: 四虎国产精品永免费| 福利片免费一区二区三区| 国产综合免费精品久久久| 国产精品亚洲二区在线观看 | 亚洲高清无在码在线无弹窗| 亚洲精品免费观看| 久久久久亚洲AV无码观看 | 午夜免费福利网站| 国产精品亚洲lv粉色| 国产成人免费全部网站| 免费无码婬片aaa直播表情| 国产日韩成人亚洲丁香婷婷| a在线视频免费观看在线视频三区| 亚洲日韩涩涩成人午夜私人影院| 国产精品免费久久久久影院| 亚洲国产美国国产综合一区二区| 1000部啪啪未满十八勿入免费| 亚洲视屏在线观看| 免费无码黄动漫在线观看| 黄色a级免费网站| 久久精品国产亚洲| 久久天天躁狠狠躁夜夜免费观看 | 亚洲国产精品13p| 精品免费tv久久久久久久| 亚洲欧洲精品在线| 成人永久免费福利视频网站| 有码人妻在线免费看片| 午夜亚洲国产理论秋霞| 午夜精品在线免费观看| aa级毛片毛片免费观看久| 亚洲精品午夜视频| 日韩精品成人亚洲专区| 特级精品毛片免费观看| 亚洲色大成网站WWW国产| 亚洲综合AV在线在线播放| 2020久久精品国产免费| 免费人成动漫在线播放r18| 亚洲一区二区电影| 午夜国产羞羞视频免费网站| 久久免费公开视频| 久久久久亚洲国产AV麻豆|