Python爬虫,请求参数加密怎么办?

这篇具有很好参考价值的文章主要介绍了Python爬虫,请求参数加密怎么办?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

背景介绍:

目标网址:

页面分析:

逆向解析加密参数思路

代码实现:

code_js.js

JS方式实现

python代码实现

总结:

                                   我是政胤 期待你的关注


Python爬虫,请求参数加密怎么办?

背景介绍:

大家好 我是政胤.

我们在请求接口的时候,发现请求参数数加密的,该如何处理呢?今天介绍两种方式完成请求参数解密,一种是通过调试js,逆向解析的方式,另一种是Python方式实现解析请求参数。

目标网址:

https://www.oklink.com/zh-cn/btc/tx-list?limit=20&pageNum=1

页面分析:

确定数据接口地址

Python爬虫,请求参数加密怎么办?

确定请求头和请求参数有没有加密

Python爬虫,请求参数加密怎么办?

Python爬虫,请求参数加密怎么办?

确定返回的数据是不是加密

Python爬虫,请求参数加密怎么办?

逆向解析加密参数思路

定位到加密参数所在哪个js文件

Python爬虫,请求参数加密怎么办?

Python爬虫,请求参数加密怎么办?

在来源面板中打开js

Python爬虫,请求参数加密怎么办?

确定加密参数所在位置

Python爬虫,请求参数加密怎么办?

打断点,刷新页面

Python爬虫,请求参数加密怎么办?

确定getApiKey方法的位置

Python爬虫,请求参数加密怎么办?

改写js

Python爬虫,请求参数加密怎么办?

Python爬虫,请求参数加密怎么办?

补全js代码,并改成成函数

Python爬虫,请求参数加密怎么办?

运行js

Python爬虫,请求参数加密怎么办?

Python爬虫,请求参数加密怎么办?

Python爬虫,请求参数加密怎么办?

Python爬虫,请求参数加密怎么办?

代码实现:

code_js.js

function getApiKey() {
    var t = (new Date).getTime()
      , e = encryptApiKey();
    return t = encryptTime(t),
    comb(e, t)
}
// encryptApiKeya
function encryptApiKey() {
    var t = "a2c903cc-b31e-4547-9299-b6d07b7631ab"
      , e = t.split("")
      , r = e.splice(0, 8);
    return e.concat(r).join("")
}
// encryptApiKey
function encryptTime(t) {
    var e = (1 * t + 1111111111111).toString().split("")
      , r = parseInt(10 * Math.random(), 10)
      , n = parseInt(10 * Math.random(), 10)
      , o = parseInt(10 * Math.random(), 10);
    return e.concat([r, n, o]).join("")
}
// comb
function comb(t, e) {
    var r = "".concat(t, "|").concat(e);
    return btoa(r)
}

// 调用函数运行
// console.log(getApiKey())

JS方式实现

import requests
import json
import execjs
from jsonpath import jsonpath
import time


# 第一页 https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict?t=1657362656709&limit=20&offset=0
# 第二页 https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict?t=1657362632969&limit=20&offset=20
# 第三页 https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict?t=1657362567236&limit=20&offset=40
# 第四页 https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict?t=1657362796076&limit=20&offset=60

def parse(offset):
    ## 目标地址:'https://www.oklink.com/zh-cn/btc/tx-list?limit=20&pageNum=1'
    with open('./code_js.js', 'r', encoding='utf-8') as f:
        js_code = f.read()
    # compile 调用文件,call 调用getApiKey函数
    apiKey = execjs.compile(js_code).call('getApiKey')
    # print(apiKey)
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36",
        'x-apiKey': apiKey
    }
    # t 是当前时间的数据戳
    t = str(time.time() * 1000)[:-5]
    # print(t)
    data = {
        't': t,
        'limit': 20,
        'offset': offset
    }
    # 数据接口地址
    url = 'https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict'
    res = requests.get(url, headers=header, params=data).text
    # json字符串数据,转为python字典数据
    dict_data = json.loads(res)
    # print(json_data)
    # 数据提取
    # 交易哈希
    hash_list = jsonpath(dict_data, "$..hash")
    # 所在区块
    blockHeight_list = jsonpath(dict_data, "$..blockHeight")
    # 数量(BTC)
    inputsValue_list = jsonpath(dict_data, "$..inputsValue")
    # 手续费(BTC)
    fee_list = jsonpath(dict_data, "$..fee")
    print(hash_list, blockHeight_list, inputsValue_list, fee_list)


# 爬取3页
for i in range(1, 4):
    print(f'正在爬取第{i}页')
    offset = (i - 1) * 20
    parse(offset)

python代码实现

import base64
import random

import requests
import json
from jsonpath import jsonpath
import time

def getApiKey():
    # 13位的时间戳
    t = int(str(time.time() * 1000)[:-5])
    e = encryptApiKey()
    # print('t的值', e)
    t = encryptTime(t)
    # print('e的值', t)
    return comb(e, t)


def encryptApiKey():
    t = "a2c903cc-b31e-4547-9299-b6d07b7631ab"
    # e是t后28个字符组成的列表
    e = [j for j in t[8:]]
    # r是前8个字符组成的列表
    r = [j for j in t[:8]]
    # 返回值就是 e拼接r组成的字符串
    e.extend(r)
    return ''.join(e)


def encryptTime(t):
    # e 为 (1 * t + 1111111111111)的结果转为字符串的每个字符组成的列表
    e = [j for j in str(1 * t + 1111111111111)]
    #  r、n、o 为 随机数字(0-9)
    r = str(random.randint(0, 9))
    n = str(random.randint(0, 9))
    o = str(random.randint(0, 9))
    # 返回的结果是 e,r, n, o 拼接后的字符串
    e.extend(list(r + o + n))
    return ''.join(e)


def comb(t, e):
    # r 是t 和"|" 和e 拼接之后的字符串
    r = t + '|' + e
    # 返回的是base64编码的字符串
    return base64.b64encode(r.encode()).decode()


def parse(offse):
    apikey = getApiKey()
    print(apikey)
    # print(apiKey)
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36",
        'x-apiKey': apikey
    }
    # t 是当前时间的数据戳
    t = str(time.time() * 1000)[:-5]
    # print(t)
    data = {
        't': t,
        'limit': 20,
        'offset': offse
    }
    # 数据接口地址
    url = 'https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict'
    res = requests.get(url, headers=header, params=data).text
    # json字符串数据,转为python字典数据
    dict_data = json.loads(res)
    # print(json_data)
    # 数据提取
    # 交易哈希
    hash_list = jsonpath(dict_data, "$..hash")
    # 所在区块
    blockHeight_list = jsonpath(dict_data, "$..blockHeight")
    # 数量(BTC)
    inputsValue_list = jsonpath(dict_data, "$..inputsValue")
    # 手续费(BTC)
    fee_list = jsonpath(dict_data, "$..fee")
    print(hash_list, blockHeight_list, inputsValue_list, fee_list)


# 爬取3页
for i in range(1, 3):
    print(f'正在爬取第{i}页')
    offset = (i - 1) * 20
    parse(offset)

总结:

通过这个案例,我们可以知道怎样确定数据接口地址,怎样确定加密参数所在哪个js文件以及了解js调试过程。通过调试js逆向解析的方式和Python方式均可实现请求参数解析。python实现的原理就是将js的写函数用python的方式来写。

                                   我是政胤 期待你的关注

Python爬虫,请求参数加密怎么办?文章来源地址https://www.toymoban.com/news/detail-506722.html

到了这里,关于Python爬虫,请求参数加密怎么办?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 技术分享 | 接口测试请求超时怎么办?

    作为一名软件测试技术面试官,经常会通过提问一些基础性的实践来考查候选人是否真正拥有相关的技术经验,在接口测试中我们经常会遇到请求超时的情况。这是一个非常普遍的问题,这就需要在平时的错误中来总结经验了以便在面试时可以举例说明报错及自己的排查过程

    2024年02月09日
    浏览(67)
  • 升级到Android12后Termux不能访问Android/data目录该怎么办

    最近手机从HarmonyOS 2.0 升级到HarmonyOS 3.0后,发现Termux不能访问Android/data目录,导致以前写的工具都不能用了。 读取不到Android/data目录 后来发现原来从Android11开始访问Android/data目录需要用户给APP应用授权,但Termux用命令行去访问Android/data目录,只显示 \\\".\\\": Permission denied (os err

    2024年02月11日
    浏览(41)
  • 【Linux】误删除/home家目录怎么办? -- 此时ssh连接登录的就是此普通用户

    👨‍🎓 博主简介   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊 交流社区: 运维交流社区 欢迎大家的加入! 🐋 希望大家多多支持,我们一起进步!😄 🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏

    2024年03月21日
    浏览(54)
  • 服务器数据库被.rmallox勒索病毒加密了怎么办?|数据恢复解决方案

    .rmallox 勒索病毒是如何工作的?它如何加密用户的文件,并要求支付赎金?          .rmallox勒索病毒是一种特殊的恶意软件,其主要目的是加密用户的重要文件(如文档、图片、视频等),并要求受害者支付赎金以获取解密密钥。以下是勒索病毒通常的工作方式和加密用

    2024年04月28日
    浏览(48)
  • VScode 中 Python 代码不高亮显示怎么办?

    最近在用 VScode 写代码的时候,发现 Python 代码不高亮显示: 这样用起来体验感不好,网上查询资料,可能存在的原因为: 安装Python扩展: 确保你已经安装了VS Code的Python扩展。如果没有安装,打开VS Code并在左侧的扩展面板中搜索\\\"Python\\\",然后选择并安装由Microsoft提供的\\\"Pyt

    2024年02月10日
    浏览(42)
  • python官网进不去怎么办,python官方网站地址

    本篇文章给大家谈谈python官网进不去怎么办,以及python官方网站地址,希望对各位有所帮助,不要忘了收藏本站喔。 1)访问官网 https://www.jetbrains.com/pycharm/download/#section=windows 下载「社区版 Community」 安装包。 2)下载完成后,「双击」运行安装包,开始安装python简单代码画爱

    2024年04月16日
    浏览(59)
  • python中用pip不是内部或外部命令怎么办?两种情况解决方法

    在python程序的开发过程中,pip是一个用来下载第三方库非常好用的工具。但是最近有小伙伴和我说在控制台使用pip命令时会出现pip不是内部或外部命令的问题,出现这个问题的原因一般是会有两个,那我们接下就给大家说一下pip问题的原因和解决方法。 1.因为pip是跟着python一

    2024年02月14日
    浏览(53)
  • 应届毕业生找Python工作遇到的难题,刚毕业没有工作经验该怎么办?

    如果你是一名应届生,你可以通过其他方式来证明自己的能力。以下是一些建议: 在校期间积累项目经验。如果你在学校里有过Python项目经验,可以在简历中详细描述你的项目经历和成果。这可以帮助雇主了解你的技能和能力。 参加编程比赛。参加编程比赛可以展示你的编

    2024年02月02日
    浏览(50)
  • python selenium 运行driver时一直弹出控制台CMD窗口怎么办

    1.python selenium 运行driver时一直弹出控制台CMD窗口,且不断报以下错误应该怎么处理? DevTools listening on ws://127.0.0.1:51303/devtools/browser/6d5f8d32-1e30-4749-ad54-17f08ee3a983 真的非常影响心情啊!!!  2.一直在网上搜索,按照大家所说的用以下代码还是不行: options = webdriver.ChromeOptions(

    2024年02月11日
    浏览(56)
  • Python爬虫如何解决提交参数js加密

    注意!!!! 仅做知识储备莫拿去违法乱纪,有问题指出来,纯做笔记记录 由于¥%…………%#%** 所以!@#¥……*……* 啥也不说直接上代码 如何找到这块单独出来的js 代码需要有一定的前端打断点的知识,在这里我就不指出了😅。 草稿箱里很古早的一篇也忘记后面有没有

    2024年02月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包