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
分享到:
相关推荐
### IBA BM-DP S7300/400 Request&ActiveSlave 通讯配置详解 #### 一、概述 本文将详细介绍如何在IBA BM-DP S7300/400环境下配置Request&ActiveSlave通讯模式,并提供具体的步骤来确保PLC与PDA之间的稳定通信。...
参数名称=参数值")方法,也可以用超链接:,页面跳转后,在目标页面中可用Ruquest["参数名称"]来接收参数。使用QuerySting 方法的优点是实现简单, 不使用服务器资源;缺点是传递的值会显示在浏览器的地址栏上,有...
例如,`Ruquest.Form["receive"]`用于获取POST的数据。POST方法比GET更安全,因为数据不会显示在URL中,但仍然可能被拦截。适用于需要保持数据私密性,且数据量不大时。 3. **通过Session存储** Session是ASP.NET...
labview程序代码参考学习使用,希望对你有所帮助。
毕设和企业适用springboot生鲜鲜花类及数据处理平台源码+论文+视频.zip
毕设和企业适用springboot企业数据智能分析平台类及汽车管理平台源码+论文+视频
毕设和企业适用springboot社区物业类及企业创新研发平台源码+论文+视频
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Floating Text Example</title> <style> .floating-text { font-size: 24px; position: relative; animation: float 3s ease-in-out infinite; } @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-20px); } } </style> </head> <body> <div class="floating-text">Hello, I'm floating!</div> <script> document.addEventListener('DOMContentLoaded', function() {
毕设和企业适用springboot社交媒体分析平台类及智慧医疗管理平台源码+论文+视频
毕设和企业适用springboot生鲜鲜花类及餐饮管理平台源码+论文+视频
毕设和企业适用springboot人工智能客服系统类及用户行为分析平台源码+论文+视频
毕设和企业适用springboot全渠道电商平台类及个性化广告平台源码+论文+视频
毕设和企业适用springboot社交互动平台类及线上图书馆源码+论文+视频
毕设和企业适用springboot企业知识管理平台类及供应链优化平台源码+论文+视频
毕设和企业适用springboot企业健康管理平台类及数据处理平台源码+论文+视频.zip
内容概要:本文档是一份面向初学者的详细指南,重点介绍如何利用Vue.js 2.0快速创建和运行简单的Todo List应用。首先指导安装必需的Node.js、npm/yarn等环境准备,接着通过Vue CLI工具生成新的Vue项目,再详细介绍项目目录和组件的构建方式。最后提供了具体的方法实现添加和删除待办事项,并指导如何使用命令启动应用,查看结果。 适合人群:具备基础Web开发技能的前端开发新手,尤其是对Vue框架感兴趣的学习者。 使用场景及目标:作为初学者入门级的学习资料,本文档的目标是让读者能够在最短时间内掌握Vue.js的基础概念和技术栈的应用方式,以便日后可以独立地构建更加复杂的Vue应用。 其他说明:除了学习如何构建应用程序之外,本文档还涵盖了Vue的基本语法和数据绑定、事件处理机制等重要概念,对于理解Vue框架的工作原理十分有帮助。
毕设和企业适用springboot企业健康管理平台类及智能化系统源码+论文+视频.zip
毕设和企业适用springboot企业健康管理平台类及远程医疗平台源码+论文+视频.zip
毕设和企业适用springboot数据可视化类及数据智能化平台源码+论文+视频
毕设和企业适用springboot生鲜鲜花类及用户体验优化平台源码+论文+视频.zip