`
lzj0470
  • 浏览: 1245190 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

[ java版]新浪微博之ruquest_token篇

阅读更多
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import xx.cn.weibo.Util;
import weibo4j.http.HttpClient;
import weibo4j.http.OAuth;
import weibo4j.http.PostParameter;
import weibo4j.http.Response;

/**
 *  注意项:提交参数的顺序不能改变,顺序为oauth_callback-oauth_consumer_key-oauth_nonce-oauth_signature_method-oauth_timestamp-oauth_version-source
 *  @author loiy
 *  @time 2011-03-25
 */

public class requestTokenNet extends HttpClient{

	private String requestUrl;
	
	private String httpMethod;
	
	private String callBackUrl;
	
	public static Random RAND = new Random();

	public requestTokenNet(String requestUrl,String callBackUrl,String httpMethod){
		this.requestUrl = requestUrl;
		this.httpMethod = httpMethod;
		this.callBackUrl = callBackUrl;
	}
	
	public Response getRequestToken(){
		int retriedCount;
		Response requestToken = null;
        boolean bool = false;
		for (retriedCount = 0; retriedCount <= Util.retryCount && !bool; retriedCount++) {
			HttpURLConnection con = null;
	        OutputStream osw = null;
	        Response res = null;
	        
	        int responseCode = -1;
	        try {      	
	        	String Authorization = generateAuthorizationHeader(this.httpMethod,
	        			this.requestUrl,
	        			new PostParameter[]{new PostParameter("oauth_callback", this.callBackUrl),
	        								new PostParameter("source",Util.APPKEY)});
	            con = getConnection(this.requestUrl);
	            con.setDoInput(true);
	            con.addRequestProperty("Authorization", Authorization);
	            con.setRequestMethod(this.httpMethod);
	            con.setRequestProperty("Content-Type",
	                     "application/x-www-form-urlencoded");
	            con.setDoOutput(true);
	            String postParam = "oauth_callback="+URLEncoder.encode(this.callBackUrl,"UTF-8")+"&source="+URLEncoder.encode(Util.APPKEY,"UTF-8");
	            byte[] bytes = postParam.getBytes("UTF-8");
	
	            con.setRequestProperty("Content-Length",
	                     Integer.toString(bytes.length));
	            osw = con.getOutputStream();
	            osw.write(bytes);
	            osw.flush();
	            osw.close();
	            responseCode = con.getResponseCode();
	            if (responseCode != 200) {
                    System.out.println("getRequestToken of method is error.No-" + responseCode + " Retrying...");
                } else {
                	bool = true;
                	requestToken = new Response(con);
                	//requestToken = res.asString();
                }
	        }catch(Exception e){
	        	e.printStackTrace();
	        }finally{
	        	try {
					osw.close();
					//con.disconnect();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
	        }
		}
        return requestToken;
	}
	
	public String generateAuthorizationHeader(String method, String requestUrl, PostParameter[] params) {
		long timestamp = System.currentTimeMillis() / 1000;
        long nonce = timestamp + RAND.nextInt();
        return generateAuthorizationHeader(method, requestUrl, params, String.valueOf(nonce), String.valueOf(timestamp));
	}
	
	private String generateAuthorizationHeader(String method, String url, PostParameter[] params, String nonce, String timestamp) {
        if (null == params) {
            params = new PostParameter[0];
        }
        List<PostParameter> oauthHeaderParams = new ArrayList<PostParameter>(5);
        oauthHeaderParams.add(new PostParameter("oauth_consumer_key", Util.APPKEY));
        oauthHeaderParams.add(new PostParameter("oauth_signature_method",Util.OAUTH_SIGNATURE_METHOD));
        oauthHeaderParams.add(new PostParameter("oauth_timestamp", timestamp));
        oauthHeaderParams.add(new PostParameter("oauth_nonce", nonce));
        oauthHeaderParams.add(new PostParameter("oauth_version", "1.0"));
        List<PostParameter> signatureBaseParams = new ArrayList<PostParameter>(oauthHeaderParams.size() + params.length);
        signatureBaseParams.addAll(oauthHeaderParams);
        signatureBaseParams.addAll(OAuth.toParamList(params));
        
        StringBuffer base = new StringBuffer(method).append("&")
                .append(OAuth.encode(OAuth.constructRequestURL(url))).append("&");
        String text = OAuth.encode(OAuth.normalizeRequestParameters(signatureBaseParams));        
        base.append(text);
        
        String oauthBaseString = base.toString();
        String signature = Util.hmacsha1(Util.APPSECRET, oauthBaseString);
        oauthHeaderParams.add(new PostParameter("oauth_signature", signature));
        text =  "OAuth " + OAuth.encodeParameters(oauthHeaderParams, ",", true);
        oauthHeaderParams.clear();
        oauthHeaderParams = null;
        return text;
    }
	
}


里面有些参数不能给各位看,但是可以根据办法名字就知道需要什么参数拉.如果还不知道,可以给我留言.
下面是测试:
public class xxNetTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		requestTokenNet requestTokenNetTest = new requestTokenNet("http://api.t.sina.com.cn/oauth/request_token",
				"http://localhost:8080/agriWeiBo/callback.jsp","POST");
		Response requestToken = requestTokenNetTest.getRequestToken();
		RequestToken token = null;
		try {
			token = new RequestToken(requestToken,requestTokenNetTest);
		} catch (WeiboException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("s="+token.getToken());
		
	}
}

返回正确结果形式:
oauth_token=ad75db0a09031b04c842777398ffb73d&oauth_token_secret=f854d467045ec5131f4aae04934ce999
如果是401错误,一般都是baseString写的不对.什么是baseString,到官方去了解一下,这里不做说明,地址是:http://open.t.sina.com.cn/wiki/index.php/Oauth/request_token
0
0
分享到:
评论
2 楼 caobo_cb 2017-04-11  
import xx.cn.weibo.Util; 
1 楼 caobo_cb 2017-04-11  
你好 Util包没有

相关推荐

    IBA BM-DP S7300/400 ruquest&activeslave;

    原版自我总结的,关于IBA BM-DP S7300/400 ruquest&activeslave;的通讯,在PLC和PDA的详细配置。

    ASP.NET页面间数据传递的方法

    参数名称=参数值")方法,也可以用超链接:,页面跳转后,在目标页面中可用Ruquest["参数名称"]来接收参数。使用QuerySting 方法的优点是实现简单, 不使用服务器资源;缺点是传递的值会显示在浏览器的地址栏上,有...

    node-v8.8.1-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    SSM+easyUI搭建简易的人事管理系统内含源码以及说明书可以自己运行复现.zip

    SSM+easyUI搭建简易的人事管理系统内含源码以及说明书可以自己运行复现.zip

    RoyalOnline.apk

    RoyalOnline.apk

    node-v9.9.0-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    TCABEE 008-2020 轨道交通车站高效空调系统技术标准.docx

    TCABEE 008-2020 轨道交通车站高效空调系统技术标准.docx

    2024-2030中国WiFi连接洗衣机市场现状研究分析与发展前景预测报告.docx

    2024-2030中国WiFi连接洗衣机市场现状研究分析与发展前景预测报告

    2024年中国乘用车用密封连接器行业研究报告.docx

    2024年中国乘用车用密封连接器行业研究报告

    红外遥控系统原理及单片机软件解码实例.RAR

    单片机学习代码资料

    为工控设备增加温度、时钟显示电路源程序.rar

    单片机学习代码资料

    node-v8.1.0-linux-ppc64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    微信小程序之商城demo+源码+文档说明

    功能 首页 搜索 分类 购物车 个人中心 商品列表 商品详情 订单 地址管理

    2024年中国便捷火锅底料行业研究报告.docx

    2024年中国便捷火锅底料行业研究报告

    PowerBuilder+Base-64加密

    PowerBuilder Base_64加密

    基于Java的在线教育平台的设计与实现.doc

    基于Java的在线教育平台的设计与实现

    node-v4.8.1-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    Numpy随堂练习1.ipynb

    Numpy随堂练习1.ipynb

    2024年中国棒材送料对准系统行业研究报告.docx

    2024年中国棒材送料对准系统行业研究报告

    node-v8.0.0-linux-armv6l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics