文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python--URL操作

2023-01-31 02:42

关注

目标URL:http://127.0.0.1:5000/oauth/authorize?redirect_uri=http%3A%2F%2F127.0.0.1%3A5000%2Fcallback%2F%3FskillId%3D18936%26token%3DNzkzODU4MzM3QUZFSElORkRWUQ%3D%3D&client_id=jwETJvFj1nkRYtVJrNZE7lS9&response_type=code&state=0.1354064097905866

URL中的元素:

  • 通常意义上的URL
  • 重定义URL:
  • 通常意思上的URL的请求参数
  • 重定义URL里面的请求参数

解析URL—urlparse

我使用的Python3.6,使用的是自带的库urllib,并使用里面的子模块parse。

from urllib.parse import urlparse

url = "https://127.0.0.1/oauth/authorize" \
      "?redirect_uri=https%3A%2F%2Fopen.bot.tmall.com%2Foauth%2Fcallback%3FskillId%3D18936%26token%3DNzkzODU4MzM3QUZFSElORkRWUQ%3D%3D" \
      "&client_id=o92cvMIa5FzGbq4LpHJoaf2j" \
      "&response_type=code" \
      "&state=0.1354064097905866"

dest_str = urlparse(url)
print(dest_str)

打印出来:

ParseResult(scheme='https', netloc='127.0.0.1', path='/oauth/authorize', params='', query='redirect_uri=https%3A%2F%2Fopen.bot.tmall.com%2Foauth%2Fcallback%3FskillId%3D18936%26token%3DNzkzODU4MzM3QUZFSElORkRWUQ%3D%3D&client_id=o92cvMIa5FzGbq4LpHJoaf2j&response_type=code&state=0.1354064097905866', fragment='')

它会解析为:

  • scheme:https
  • netloc:127.0.0.1
  • path:/oauth/authorize
  • params:
  • query:redirect_uri=https%3A%2F%2Fopen.bot.tmall.com%2Foauth%2Fcallback%3FskillId%3D18936%26token%3DNzkzODU4MzM3QUZFSElORkRWUQ%3D%3D&client_id=o92cvMIa5FzGbq4LpHJoaf2j&response_type=code&state=0.1354064097905866
  • fragment:

解析query—使用parse_qs

from urllib.parse import urlparse, parse_qs

url = "https://127.0.0.1/oauth/authorize" \
      "?redirect_uri=https%3A%2F%2Fopen.bot.tmall.com%2Foauth%2Fcallback%3FskillId%3D18936%26token%3DNzkzODU4MzM3QUZFSElORkRWUQ%3D%3D" \
      "&client_id=o92cvMIa5FzGbq4LpHJoaf2j" \
      "&response_type=code" \
      "&state=0.1354064097905866"

dest_str = urlparse(url)
print(parse_qs(dest_str.query))

打印出来:

{'redirect_uri': ['https://open.bot.tmall.com/oauth/callback?skillId=18936&token=NzkzODU4MzM3QUZFSElORkRWUQ=='], 'client_id': ['o92cvMIa5FzGbq4LpHJoaf2j'], 'response_type': ['code'], 'state': ['0.1354064097905866']}

解析redirect_uri—使用urlparse

from urllib.parse import urlparse, parse_qs

url = "https://127.0.0.1/oauth/authorize" \
      "?redirect_uri=https%3A%2F%2Fopen.bot.tmall.com%2Foauth%2Fcallback%3FskillId%3D18936%26token%3DNzkzODU4MzM3QUZFSElORkRWUQ%3D%3D" \
      "&client_id=o92cvMIa5FzGbq4LpHJoaf2j" \
      "&response_type=code" \
      "&state=0.1354064097905866"

dest_1 = urlparse(url)
dest_2 = parse_qs(dst_1.query)
dest_3 = urlparse(dest_2)
print(parse_qs(dest_str.query))

最终的

# encoding: utf-8

from urllib.parse import urlparse, parse_qs
import html

url = "https://127.0.0.1/oauth/authorize" \
      "?redirect_uri=https%3A%2F%2Fopen.bot.tmall.com%2Foauth%2Fcallback%3FskillId%3D18936%26token%3DNzkzODU4MzM3QUZFSElORkRWUQ%3D%3D" \
      "&client_id=o92cvMIa5FzGbq4LpHJoaf2j" \
      "&response_type=code" \
      "&state=0.1354064097905866"


def main():
    dest_1 = urlparse(url)
    #print(dest_1)             # ParseResult(scheme='https', netloc='127.0.0.1', path='/oauth/authorize', params='', query='redirect_uri=https%3A%2F%2Fopen.bot.tmall.com%2Foauth%2Fcallback%3FskillId%3D18936%26token%3DNzkzODU4MzM3QUZFSElORkRWUQ%3D%3D&client_id=o92cvMIa5FzGbq4LpHJoaf2j&response_type=code&state=0.1354064097905866', fragment='')

    dest_2 = parse_qs(dest_1.query)
    #print(dest_2)              # {'redirect_uri': ['https://open.bot.tmall.com/oauth/callback?skillId=18936&token=NzkzODU4MzM3QUZFSElORkRWUQ=='], 'client_id': ['o92cvMIa5FzGbq4LpHJoaf2j'], 'response_type': ['code'], 'state': ['0.1354064097905866']}

    dest_3 = dest_2['redirect_uri']
    #print(dest_3)              # ['https://open.bot.tmall.com/oauth/callback?skillId=18936&token=NzkzODU4MzM3QUZFSElORkRWUQ==']

    print(str(dest_3)[2:-2])    # https://open.bot.tmall.com/oauth/callback?skillId=18936&token=NzkzODU4MzM3QUZFSElORkRWUQ==

    dest_4 = urlparse(str(dest_3)[2:-2])
    print(dest_4)               # ParseResult(scheme='https', netloc='open.bot.tmall.com', path='/oauth/callback', params='', query='skillId=18936&token=NzkzODU4MzM3QUZFSElORkRWUQ==', fragment='')

    dest_5 = parse_qs(dest_4.query)
    print(dest_5)                     # {'skillId': ['18936'], 'token': ['NzkzODU4MzM3QUZFSElORkRWUQ==']}

    dest_6 = dest_5['token'] # ['NzkzODU4MzM3QUZFSElORkRWUQ==']
    print(str(dest_6)[2:-2]) # NzkzODU4MzM3QUZFSElORkRWUQ==


if __name__ == '__main__':
    main()
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯