Weibo开发中的error:redirect_uri_mismatch问题解决

引言: 在中文地区,微博影响力不言而喻,这里尝试分析一个在进行微博API开发过程中碰到的问题。


1. 问题提出

    基于代码来进行Weibo API的访问,但是出现了一个错误信息:

    

    访问代码如下:

# -*- coding: utf-8 -*-
from weibo import APIClient  
import webbrowser#python内置的包 

APP_KEY = '3028347330'  
APP_SECRET = 'a2551a1f305c54f4e2e188b665098207'  
CALLBACK_URL = 'http://www.digdata.top/weibo'  
  
#利用官方微博SDK  
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)  
#得到授权页面的url,利用webbrowser打开这个url  
url = client.get_authorize_url()  
print url  
webbrowser.open_new(url)  
 这里的app_key, app_secret取自open.weibo.com平台下的我的应用-->基本信息--> 基本应用信息之中:

 

2. 问题的分析

   在执行webrowser.open_url(url)这个语句,默认会打开当前系统的默认浏览器,尝试访问其地址:

https://api.weibo.com/oauth2/authorize?redirect_uri=http%3A//www.xxx.top/weibo&response_type=code&client_id=302847330
  经过分析可预置,其为回调地址,这个回调地址在代码写死的,但是却无法回调成功,应该是被weibo的系统拦截了;换句话说,就是与系统的允许规则不匹配,那系统允许的规则是什么呢?

3.  问题定位

    在进入open.weibo.com之后,在我的应用-->应用信息-->高级信息的功能中,发现这里配置了OAuth2.0 授权设置,这里的配置URL与代码中使用的不一致,故确定问题应该是在这里,将其修改为代码中的URL地址:

   

3. 验证猜测

   重新执行打开URL的代码: webbrowser.open_new(url),在默认的浏览器中即可看到:

  

   输入微博账号,即可拿到code信息。

  这里把callback URL中的代码做个示例:

	@GetMapping("/weibo")
	@ResponseBody
	public String getCode(@RequestParam(name="code", required=false) String code) {
		
		logger.info("code==>" + code);
		
		return code;
	}

  在拿到code信息之后,即可设置client的相关信息:

# Get the valid code from the browser
code = '399f66623d8e154b5fce40df21cd49b6'

#获取token
r = client.request_access_token(code)  
access_token = r.access_token # 新浪返回的token,类似abc123xyz456  
expires_in = r.expires_in  # token过期的UNIX时间

# 设置得到的access_token  
client.set_access_token(access_token, expires_in) 
从而利用client去访问微博的信息,这里用访问common的信息做为示例:

countrylist = client.common.get_country.get()

4.总结

   这里核心的问题是将OAuth授权的URL地址与代码中使用的URL地址使用一致即可。

  


你可能感兴趣的:(python,微博,callback,OAuth,weibo)