V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
warcraft1236
V2EX  ›  程序员

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

  •  
  •   warcraft1236 · 2016-11-29 11:07:57 +08:00 · 3727 次点击
    这是一个创建于 2676 天前的主题,其中的信息可能已经有所发展或是发生改变。
    示例
    //请求
    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 获取到重定向的地址

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

    以上两种都试过可行。

    如果要出验证码可以用打码平台搞定。
    techmoe
        2
    techmoe  
       2016-11-29 11:54:07 +08:00 via Android
    写个应用内浏览器在检测到 url 变成回调地址时候自动匹配当前 URL 中的 code
    kethylar
        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! ")
    hm279
        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);
    }
    });
    ```
    warcraft1236
        5
    warcraft1236  
    OP
       2016-11-29 14:22:32 +08:00
    @hm279 感谢我去试试
    warcraft1236
        6
    warcraft1236  
    OP
       2016-11-29 15:02:07 +08:00
    @hm279 return 中的 url 就是最后重定向的地址吗?
    hm279
        7
    hm279  
       2016-11-29 16:18:47 +08:00 via Android
    @warcraft1236 看 log 打印结果, return true; webview 就不会加载你的重定向 url 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4692 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 01:08 · PVG 09:08 · LAX 18:08 · JFK 21:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.