新浪微博的登录 API 应该怎么才能自动获取返回的 code 值呢?

2016-11-29 11:07:57 +08:00
 warcraft1236
示例
//请求
https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code

//同意授权后会重定向
http://www.example.com/response&code=CODE

上段是新浪微博给的示例,浏览器打开示例中请求那样的地址,打开的网页是让输入新浪微博帐号密码的网页,输入帐号密码之后,网页就会跳转到示例中同意授权后会重定向那样的网址,网址中code=后边的值就是需要获取的

我尝试用 okhttp 来发送这个请求,但是返回的结果是授权页面,用浏览器打开,不知道怎么才能用 JAVA 获取到重定向的地址

3827 次点击
所在节点    程序员
7 条回复
anexplore
2016-11-29 11:51:59 +08:00
第一种:代码模拟登录、授权中的 HTTP 请求,获取跳转后 URL 地址。
第二种: webdriver 调用浏览器,模拟人工点击,获取 url

以上两种都试过可行。

如果要出验证码可以用打码平台搞定。
techmoe
2016-11-29 11:54:07 +08:00
写个应用内浏览器在检测到 url 变成回调地址时候自动匹配当前 URL 中的 code
kethylar
2016-11-29 13:08:56 +08:00
CALLBACK_URL = 'http://127.0.0.1:5000/code_handle' 回调地址填本地服务
自己写个方法获取 get 参数即可
@app.route('/code_handle', methods=['GET'])
def code_handle():
if request.method == 'GET':
code = request.args.get('code', "didn't get it! ")
hm279
2016-11-29 13:24:18 +08:00
你是 android 开发吗?用 webview 加载第一个 url ,授权成功后返回重定向, webview 会自动加载重定向 url ,下面方法就可以拿到加载的 url ,就可以拿到 code 了。
```java
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d("webView url", url);
return super.shouldOverrideUrlLoading(view, url);
}
});
```
warcraft1236
2016-11-29 14:22:32 +08:00
@hm279 感谢我去试试
warcraft1236
2016-11-29 15:02:07 +08:00
@hm279 return 中的 url 就是最后重定向的地址吗?
hm279
2016-11-29 16:18:47 +08:00
@warcraft1236 看 log 打印结果, return true; webview 就不会加载你的重定向 url 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/324049

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX