首页 > 编程语言 >python调用java的jar包,在scrapy中处理加密逻辑

python调用java的jar包,在scrapy中处理加密逻辑

时间:2023-08-18 21:34:51浏览次数:45  
标签:java python jar stamp result time import

APP采集过程中有些请求是需要加密处理的,之前的方式是通过frida-inject的方式处理的,但是这需要连接手机,

好在本次处理的APP加密逻辑不是很复杂,加密逻辑都在java层,于是便将里面的java层的加密逻辑单独摘出来,想单独的做成一个jar包,这样就不用再用python做一个相同的算法还原了

经过半天的调试,终于将java层用到的加密逻辑代码都摘了出来。

 

 以前没有做过java开发,基础的导出jar包都不知道怎么搞,经过这次经历也算补齐了一个短板,特此记录下

在eclipse里创建一个项目

 在src文件夹上右键,选择创建包Package,取个名字就好

将用到的java代码,以及依赖的java类都放在里面,这个是相对依赖比较少的情况,对于依赖第三方的类库的还没处理过

 对于本次的APP加密用到的就这几个类文件,在包名上右键,选择Export

如下图所示,选择Java下的JAR file

 

选择好保存目录就可以了,这样就生成了jar包文件了

 

python调用jar包有多种方式,一个是用Jython,需要单独安装一个java版的python,有点麻烦

另一种就是通过jpype的方式,直接在python代码里调用jar包文件

详细的方式可以参考 其他博主的文章 (https://blog.51cto.com/u_16099268/6527910)文章写的很详细

需要注意的是编译成jar文件的时候需要最好用系统环境变量里的java sdk,不然在jpype调用jar包的时候很容易因为java sdk版本的问题导致异常,

因为我的机器上有多个java sdk版本,jpype默认调用的是系统环境变量里的java

 

import reimport traceback
import time
import json
import os
import scrapy
import requests
from urllib import parse
from scrapy import FormRequest
from datetime import datetime, timedelta
from scrapy import signals
from urllib.parse import urljoin, urlparse, parse_qs,urlencode
from scrapy.pipelines.files import FilesPipeline
from hashlib import md5
import jpype

class LzzxSpider(scrapy.Spider):
    name = 'lzzx'
    # python要调用的java的jar包路径
    jarpath = os.path.join(os.path.abspath("."), "lzzxTools.jar")
    # 获取jvm.dll的文件路径
    jvmPath = jpype.getDefaultJVMPath() 
    # 使用jpype开启虚拟机
    if jpype.isJVMStarted() is not True:
        jpype.startJVM(jvmPath, "-ea", "-Djava.class.path=%s" % jarpath)
    # 加载java类
    tools = jpype.JClass("lzzxlib.Tools")
     # 爬虫结束时执行的函数      def closed(self, reason):      # 关闭jvm         jpype.shutdownJVM()             # jpype调用jar包      def sign_stamp(self,price_type):         print(price_type)         time_stamp = int(round(time.time() * 1000))         tree_url = "xxx"         base_url = "xxx"      price_detail_url = "xxx"      display_url = "xxx"      price_type_url = "***"        if price_type == "dp":             result = str(self.tools.a(time_stamp,display_url))             return {"time_stamp": time_stamp, "result": result}        elif price_type == "btb":             result = str(self.tools.a(time_stamp,price_type_url))             return {"time_stamp": time_stamp, "result": result}        elif price_type == "tree":             result = str(self.tools.a(time_stamp,tree_url))             return  {"time_stamp": time_stamp, "result": result}        elif price_type == "price_detail":             result = str(self.tools.a(time_stamp,price_detail_url))             return {"time_stamp": time_stamp, "result": result}        else:             result = str(self.tools.a(time_stamp,base_url))             return {"time_stamp": time_stamp, "result": result}         

这样就完成了在scrapy中调用jar包的整个过程,特此记录下

 

标签:java,python,jar,stamp,result,time,import
From: https://www.cnblogs.com/fly-kaka/p/17641660.html

相关文章

  • [oeasy]python0085_[趣味拓展]字体样式_下划线_中划线_闪动效果_反相_取消效果
    字体样式回忆上次内容\033xm可以改变字体样式0m-10m之间设置的都是字体效果0m复原1m变亮2m变暗从3m到10m又是什么效果呢??真的可以让文字blink闪烁吗?......
  • JavaScript中的析构对象,析构数组与展开运算符
    前言这些是JavaScript中重要的编程思想,这些析构对象,析构函数与展开运算符很重要这块内容不怎么难,纯属一些语法,但是在所谓的函数式编程,以及React中却是广泛使用的逆向思维,之前是怎么构造,而现在让你如何展开,获取里面的内容!!逆向思维,之前是怎么构造,而现在让你如何展开,获取里面的内......
  • 记录Python调用企业微信报错"errcode":44004,"errmsg":"Warning: wrong json format.
    1.通过单独的文件调用接口发送消息无异常;2.通过嵌套调用接口报错:"errcode":44004,"errmsg":"Warning:wrongjsonformat.;3.检查json文本格式无异常;4.怀疑json文本赋值有问题,增加trycache捕获,没有报错,但是可以正常调用接口!!5.打印json文本,比对trycatch的区别,发现多了个空格,依葫......
  • Python game engine framework All In One
    PythongameengineframeworkAllInOneRen'PyRen'Py视觉小说引擎是一款开放源代码的自由软件引擎,用来创作透过电脑叙述故事的视觉小说。Ren'Py之名是Ren'ai与Python两词混合而成。Ren'ai为日文,意指“恋爱”,而Python是Ren'Py所使用的语言环境。和其他流行的视觉小说......
  • [oeasy]python0085_[趣味拓展]字体样式_下划线_中划线_闪动效果_反相_取消效果
    字体样式回忆上次内容\033xm可以改变字体样式0m-10m之间设置的都是字体效果0m复原1m变亮2m变暗  ​ 添加图片注释,不超过140字(可选) 从3m到10m又是什么效果呢?? ​ 添加图片注释,不超......
  • 如何用java将本地redis 中所有类型数据同步到阿里云redis中
    在分布式系统中,数据同步是一个重要的任务,特别是在将数据从一个Redis实例同步到另一个Redis实例的情况下。本篇博客将介绍如何使用Java编程语言以及Jedis(JavaRedis客户端)库来实现将本地Redis中的所有类型数据同步到阿里云Redis实例中。核心代码importredis.client......
  • JavaScript中常见的数据结构和算法及其应用场景简介
    在JavaScript编程中,数据结构和算法是必不可少的组成部分。本文将介绍JavaScript中常见的数据结构和算法以及它们的应用场景。数据结构数组数组是JavaScript中最常见的数据结构之一。它是一种有序的集合,可以存储任意类型的数据。由于数组支持快速随机访问,因此它非常适合用于存......
  • json与java对象转换
    导入包fasjsonjava对象转json//1.查询所有这张表所有的数据,调用Service层的selectAll()List<Brand>bs=brandService.selectAll();System.out.println(bs); //2.将java集合转成JSON数据StringjsonString=JSON.toJSONString(bs);  json转java对象 //1.获取......
  • docker方式部署 uvicorn python项目
    uvicorn项目接触比较少,写dockerfile编译后,启动一直报错重启,尤其是最后写ENTRYPOINT启动命令,改了很多次,特地记录下。以下为正确的dockerfile文件FROMpython:latestRUNpipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplefastapi[all]RUNpipinstall-ihttps://p......
  • 基于Python的招聘网站爬虫及可视化的实现-计算机毕业设计源码+LW文档
    开发语言:Python框架:flaskPython版本:python3.7.7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:PyCharm浏览器:谷歌浏览器DROPTABLEIFEXISTSa6woc_zhaopinxinxi;/*!40101SET@saved_cs_client=@@character_set_client/;/!40101SETcharacter_set_cli......