远程服务器返回错误: (403) 已禁止。

Sep 12, 2012 at 6:27 AM

现在微博上大部分接口都需要用户登录,如果没有检测到登陆就会给出oauth失败的消息。

我跟踪了一下,发现目前的代码直接去调用API数据,哪怕客户目前已经在浏览器上登录(或者通过这个SDK登陆也一样),由于服务器端的HttpWebRequest并没有把用户在微博上的cookie(或还有其他信息)传过去,导致微博认为“服务器”没有登录,从而拒绝请求。

比如Sina.API.Dynamic.Suggestions.HotUsers就是要求登陆的,大家可以测试一下。

这个问题有预期的解决时间或版本号吗?

Sep 12, 2012 at 6:33 AM

OAuth.cs中间有这么一句:

			if (!string.IsNullOrEmpty(AccessToken))
			{
				http.Headers["Authorization"] = string.Format("OAuth2 {0}", AccessToken);
			}

当使用这个构造函数:
		public OAuth(string appKey, string appSecret, string callbackUrl = null)
		{
			this.AppKey = appKey;
			this.AppSecret = appSecret;
			this.AccessToken = string.Empty;
			this.CallbackUrl = callbackUrl;
			
		}

Headers["Authorization"]这个就是验证的符号,但是如果API要求登陆的话,使用这个构造函数是必然会得到这个错误的。
Coordinator
Sep 17, 2012 at 5:54 AM

目前仍然有部分高级权限的KEY可以不登陆调用某些API,所以加上了那么一句,作用就是让高级权限的应用能够在不登陆的情况下调用接口。Web版的登陆界面右侧的微博列表就是这么个例子。用iphone的key是可以不登陆获取数据的,但普通的key任何时候都要求用户登录,这个比计较蛋疼。