发新浪微博,oauth授权后取到token和secret,但是在发微博的时候说signature_invalid
oauth主要用的是signpost的,代码主要是这一块:
class SendListener implements OnClickListener {
public void onClick(View v) {
HashMap<String,String> map = new HashMap<String,String>();
map.put("status","myweibo");
String oauthToken = getSharedPreferences("data", 0).getString("OAUTH_TOKEN", "");
String oauthTokenSecret = getSharedPreferences("data", 0).getString("OAUTH_TOKEN_SECRET", "");
System.out.println("oauthToken="+oauthToken + "oauthTokenSecret" + oauthTokenSecret);
WeiboClient client = new WeiboClient("4237870191","4d55a74c457f95ffb8105f0ec8107137",oauthToken,oauthTokenSecret);
client.doPost("http://api.t.sina.com.cn/statuses/update.json", map);
}
}
public static void doPost(String url, Map<String,String> map){
HttpPost post = new HttpPost(url);
Iterator<String> it = map.keySet().iterator();
System.out.println(map.size());
HttpParameters param = new HttpParameters();
while (it.hasNext()) {
String key = it.next();
String value = map.get(key);
param.put(key, URLDecoder.decode(value));
}
consumer.setAdditionalParameters(param);
try {
consumer.sign(post);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Header oauthHeader = post.getFirstHeader("Authorization");
System.out.println(oauthHeader.getValue());
HttpResponse response = null;
try {
System.out.println("before execute");
response = new DefaultHttpClient().execute(post);
System.out.println(getResponseText(response));
} catch (Exception e) {
e.printStackTrace();
}
取到的header信息是:
OAuth oauth_token="54ee9a3235147b7f0d50c201be7c7d17", oauth_consumer_key="4237870191", oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1320649129", oauth_nonce="7920138101552200009", oauth_signature="Q7JnGG1msLoMx4jgdy2mbBQIySY%3D".
response的信息是:
{"request":"/statuses/update.json","error_code":"401","error":"40107:Oauth Error: signature_invalid!"}
求高手帮看一下 --------------------编程问答-------------------- 没人,自己先顶一下。 --------------------编程问答-------------------- 还没人,我汗 --------------------编程问答-------------------- 还是没人 再顶 --------------------编程问答-------------------- 顶一个吧……没看懂,签名非法 --------------------编程问答-------------------- 对比了一下新浪官网上的header例子,发现跟我的基本上一样的。
//新浪介绍上提供的header
OAuth oauth_nonce="oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1272325550",
oauth_consumer_key="GDdmIQH6jhtmLUypg82g",
oauth_token="819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw",
oauth_signature="yOahq5m0YjDDjfjxHaXEsW9D%2BX0%3D",
oauth_version="1.0"
//我的header
OAuth oauth_token="54ee9a3235147b7f0d50c201be7c7d17",
oauth_consumer_key="4237870191",
oauth_version="1.0",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1320649129",
oauth_nonce="7920138101552200009",
oauth_signature="Q7JnGG1msLoMx4jgdy2mbBQIySY%3D". --------------------编程问答-------------------- 帮你高亮一下 获得授权玩微薄的朋友帮忙看一下吧 --------------------编程问答-------------------- 签名出错了,不能换个腾讯微博试试看 --------------------编程问答-------------------- http://forum.open.weibo.com/read.php?tid=2094 --------------------编程问答-------------------- 尝试将所有参数(OAuth参数 和 status/update API参数)参与签名计算并通过Post Body发送所有数据(无需用HTTP Header)。
参见开源项目AMicroblogAPI: http://amicroblogapi.codeplex.com
下载源码,参阅AMicroblog.cs line 386
--------------------编程问答-------------------- thank you
--------------------编程问答-------------------- 这个我看到了,他是发图片的问题,跟我这还不大一样,谢啦
--------------------编程问答-------------------- 腾讯的还要复杂点貌似。
--------------------编程问答-------------------- 顶一下,哪位大虾会的帮忙看下 --------------------编程问答-------------------- 顶一下,哪位大虾会的帮忙看下 --------------------编程问答-------------------- 顶一下,哪位大虾会的帮忙看下 --------------------编程问答-------------------- 我也遇到了这个问题, 你解决了吗??
--------------------编程问答--------------------
顶顶顶顶顶顶顶!
补充:移动开发 , Android