示例
//请求
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 获取到重定向的地址
1
anexplore 2016-11-29 11:51:59 +08:00
第一种:代码模拟登录、授权中的 HTTP 请求,获取跳转后 URL 地址。
第二种: webdriver 调用浏览器,模拟人工点击,获取 url 以上两种都试过可行。 如果要出验证码可以用打码平台搞定。 |
2
techmoe 2016-11-29 11:54:07 +08:00 via Android
写个应用内浏览器在检测到 url 变成回调地址时候自动匹配当前 URL 中的 code
|
3
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! ") |
4
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); } }); ``` |
5
warcraft1236 OP @hm279 感谢我去试试
|
6
warcraft1236 OP @hm279 return 中的 url 就是最后重定向的地址吗?
|
7
hm279 2016-11-29 16:18:47 +08:00 via Android
@warcraft1236 看 log 打印结果, return true; webview 就不会加载你的重定向 url 了
|