前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >博客园api调用实例:获取授权码

博客园api调用实例:获取授权码

作者头像
冰霜
发布2023-02-24 11:18:12
6400
发布2023-02-24 11:18:12
举报
文章被收录于专栏:冰霜的软件测试技术分享

写在前面:

博客园 OpenAPI文档 https://api.cnblogs.com/help

我们在调用博客园相关api时,一般先要获取到token

关于token的获取,官方提供了2种方式:

Client_Credentials授权 和 Authorization_Code授权

Client_Credentials授权比较简单,只需要根据申请到的client_id和client_secret就可以拿到 access_token

但是使用这种方式拿到的access_token调用个别接口时却无法调通(例如:获取当前登录用户信息)

此时需要使用Authorization_Code授权拿到的access_token才行

它的接口文档如下

该接口有一个code参数,它是博客园的授权码,需要通过另一个接口获取:获取授权码

下面讲一下如何获取授权码

获取授权码的接口文档如下

刚开始我用requests在后台请求了这个接口,发现无法得到code

详细说明中有写到:在浏览器中请求这个接口地址,会自动定向到博客园登陆页,登陆后会进入默认回调页

所以在浏览器中输入这个接口地址,并拼接上参数,如下

代码语言:javascript
复制
https://oauth.cnblogs.com/connect/authorize?client_id=5xxxxx3&scope=openid profile CnBlogsApi offline_access&response_type=code id_token&redirect_uri=https://oauth.cnblogs.com/auth/callback&state=abc&nonce=xyz

登陆后就可以获得授权码了

很明显这个结果我们无法通过接口拿到,它是在重定向到回调页面时,自动带上的code参数,应该从前端页面获取

例行网上冲浪一番后,发现可以通过selenium来实现,用selenium来模拟前端登录然后拿到code

传送门:https://q.cnblogs.com/q/133334/

具体实现过程如下

代码语言:javascript
复制
# coding: utf-8
"""
author: hmk
detail: 
create_time: 
"""
from selenium import webdriver
from urlobject import URLObject
from utils.read_conf import ConfigIni


conf = ConfigIni()
# print(conf["cn_blogs"]["client_id"])


def get_code():

    driver = webdriver.Chrome()

    url = URLObject("https://oauth.cnblogs.com/connect/authorize").add_query_params(
        client_id=conf["cn_blogs"]["client_id"],
        scope="openid profile CnBlogsApi offline_access",
        response_type="code id_token",
        redirect_uri="https://oauth.cnblogs.com/auth/callback",
        state="abc",
        nonce="xyz"
    )

    # print(url)

    driver.get(url)

    driver.implicitly_wait(30)

    code = driver.find_element_by_id('code').text
    print(code)
    # print("当前获取到的博客园授权码code={}".format(code))
    return code


if __name__ == '__main__':
    get_code()

运行这个文件后,会自动打开chrome浏览器,然后跳到登录页面,你手动输入博客园账号密码登陆后,后端就会把code打印出来了

因为每次调用get_code()函数时,selenium都会打开一个新的浏览器,然后需要你手动输入验证码,这样太不人性化了

我们需要设置selenium不要每次都打开新的浏览器,直接调用已经打开的浏览器,这样手动登陆一次后就可以重复使用了

关于如何设置这一块请参考如下博客:

mac:https://blog.csdn.net/weixin_35757704/article/details/109274655

windows:https://blog.csdn.net/weixin_41858542/article/details/84974356

拿到code后,就可以获取博客园的token了~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冰霜的软测基地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档