首页 > 其他分享 >中国观鸟记录中心

中国观鸟记录中心

时间:2023-10-09 11:44:38浏览次数:23  
标签:中心 记录 res sign js var CryptoJS 观鸟 data

import requests

# 调用js报错时,修改默认编码格式
import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")

import execjs

request_data = "{\"limit\":\"20\",\"page\":\"2\"}"

#请求参数加密
with open("bird.js", "r", encoding='utf-8') as f:
    data = f.read()
js = execjs.compile(data)
res = js.call("sign", request_data)
requestId = res.get('requestId')
sign = res.get('sign')
timestamp = res.get('timestamp')
request_sign_data = res.get('data')


url = "https://api.birdreport.cn/front/activity/search"
headers = {
"Origin":
"http://birdreport.cn",
    "Requestid":requestId,
    "Sign":sign,
    "Timestamp":timestamp,
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36",
    "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"
}

response = requests.post(url=url,headers=headers,data=request_sign_data)
response_data = response.json().get('data')
#返回数据解密
with open("data.js", "r", encoding='utf-8') as f:
    data = f.read()

js = execjs.compile(data)
res = js.call("g", response_data)
print(res)

python 调用js报错时添加:
import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen, encoding="utf-8")

对应的bird.js

global.window = {};
const JSEncrypt = require('jsencrypt');
const MD5 = require('md5');

function getUuid() {
    var s = [];
    var a = "0123456789abcdef";
    for (var i = 0; i < 32; i++) {
        s[i] = a.substr(Math.floor(Math.random() * 0x10), 1)
    }
    s[14] = "4";
    s[19] = a.substr((s[19] & 0x3) | 0x8, 1);
    s[8] = s[13] = s[18] = s[23];
    var b = s.join("");
    return b
}

function sign(data) {
    var paramPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvxXa98E1uWXnBzXkS2yHUfnBM6n3PCwLdfIox03T91joBvjtoDqiQ5x3tTOfpHs3LtiqMMEafls6b0YWtgB1dse1W5m+FpeusVkCOkQxB4SZDH6tuerIknnmB/Hsq5wgEkIvO5Pff9biig6AyoAkdWpSek/1/B7zYIepYY0lxKQIDAQAB";
    var encrypt = new JSEncrypt();
    encrypt.setPublicKey(paramPublicKey);
    var c = Date.parse(new Date());
    var d = getUuid();
    var signdata = encrypt.encrypt(data + "\u0000");

    var str = c.toString();
    var f = MD5(data+d+str);

    return {
        "data":signdata,
        "sign":f,
        "timestamp":str,
        "requestId":d
    }
}

对应的data.js

const CryptoJS = require('crypto-js');
const AES = require('crypto-js/aes');
const enc = require('crypto-js/enc-utf8');

function g(a){
        var key = '3583ec0257e2f4c8195eec7410ff1619';
        var iv = 'd93c0d5ec6352f20';
        var b = CryptoJS.enc.Utf8.parse(key);
        var c = CryptoJS.enc.Utf8.parse(iv);
        var d = CryptoJS.AES.decrypt(a, b, {
            iv: c,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
        return d.toString(CryptoJS.enc.Utf8)

}

调用后输出的结果:

标签:中心,记录,res,sign,js,var,CryptoJS,观鸟,data
From: https://www.cnblogs.com/xchuan/p/17751328.html

相关文章

  • Sql Server 2008查询数据库中各表记录行数
    RT SELECTa.name,b.rows,LTRIM(STR(b.used*8/(casewhenb.used<1000then1else1024end),15,0)+(casewhenb.used<1000then'KB'else'MB'end))as[使用空间],LTRIM(STR(b.reserved*8/(casewhenb.reserved<1000th......
  • 做题记录
    题目名称知识点时间小贝的欢送会STL工具,贪心2023年10月7日小贝的守卫二分2023年10月7日阿尔法的谜题一元二次方程2023年10月8日小贝的旅途树,贪心2023年10月8日......
  • linux学习记录 10.9
    知识点:git-版本管理工具,一个树的结构来维护所有历史版本,可持久化,支持多人合作工作区:仓库的目录。工作区是独立于各个分支的。 =》暂存区:工作区写入版本库前的缓存区=》 版本库:将所有版本用一棵树的形式存下来每次head只会处于一个结点,要将当前暂存区存到版本库里的时候,就......
  • 【MySQL】 将字段相同的记录排在一起,按时间倒序
    一、实现效果:蓝牙mac字段是相同的记录,排在一起,再按时间倒序,总体时间来说也需要倒序 二、SQL编写:最开始的想法就是,那我直接按mac和时间排序不就好了SELECT*FROMaca_be_lpresultORDERBYmacDESC,update_dateDESC但是实际业务会有这样的的情况1、同一个mac的记录,......
  • linux学习记录 10.8
    acterminal分配了如下信息:(1)user用户名  (2)hostnameip地址(3)password密码homework4getinfo查看上述信息 知识点:1、ssh登录到某个自己的服务器sshuser@hostname=登录服务器 exit/logout/ctrl+d=退出退出后进入.ssh看到一个known_hosts就会记录刚......
  • iaas运维笔记记录
    iaas运维笔记记录镜像创建source/etc/keystone/admin-openrc.sh(挂载用户配置文件)glanceimage-create--name"cirros"--disk-formatqcow2--container-formatbare<cirros-0.5.2-x86_64-disk.qcow2--name:创建后的镜像名称--disk-format:镜像格式--contrainer-form......
  • 【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A+建材识别装置+CUG汪汪小分队+问题记
    【玄铁杯第三届RISC-V应用创新大赛】LicheePi4A+建材识别装置+CUG汪汪小分队+opencv问题记录一、开发板环境搭建1.1开发板外观图1开发板带铝合金外壳外部图图2开发板带铝合金外壳内部图在yolox模型部署好后,在虚拟环境中调用opencv的imshow等图形化操作会报下面错误:1.2......
  • 记录--解决扫码枪因输入法中文导致的问题
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助问题最近公司项目上遇到了扫码枪因搜狗/微软/百度/QQ等输入法在中文状态下,使用扫码枪扫码会丢失字符的问题思考这种情况是由于扫码枪的硬件设备,在输入的时候,是模拟用户键盘的按键来实现的字符输入的,所以会触发......
  • 学生管理系统使用集合保存,不是用数据库的(仅供参考,网上找的,记录用)
    packagecom.ima;importcom.itheima.Student;importjava.util.ArrayList;importjava.util.Scanner;/*学生管理系统*/publicclassStudentManager{publicstaticvoidmain(String[]args){//创建集合对象,用于存储学生数据ArrayList<Student>a......
  • es针对nested类型数据无法进行过滤查询的问题记录
    问题描述es中存在有一个名为task_data_1的索引,其字段映射关系如下所示:{"task_data_1":{"mappings":{"dynamic_templates":[{"dates":{"match_mapping_type":......