【Java】Java 调用 Python 推送数据 Http(s)
说明
为啥一个好好的岗位是Java开发工程师要去做写Python呢?因为产品经理安排的(突然多少有点明白为啥程序员和产品经理会一直开撕)。由于在选择企业的时候没看清企业性质,看了要求以为就是互联网企业,现在看看初为社畜的我还是太天真了。不过既然这几天已经在写Python脚本了,那也不能浪费这段时间的经历了,毕竟Python的闪光点也不少。
Java调用Python的方法很多先说
第一种 在Java类中直接执行Python语句这一种方法用的不多、也不推荐大家使用
第二种 在Java类中直接调用Python脚本这一种方法用的不多、也不推荐大家使用
第三种 使用Runtime.getRuntime()执行Python脚本文件,推荐使用!因为这种办法可以让进程与程序交互,可以看到出现的问题,便于解决。
上方的方法在这里不说明 这一次说明的是通过Http去调用Python的服务! 这一种方法维护起来方便、耦合性不高,可以放在内网中调用也不用考虑安全性。
🍟 首先Python
🥩介绍
第一点要了解Flask也不难就是安装然后导入就好了
第二点就要看自己要悄悄推送数据的网站是否支持json咯
最后就是编码
🥩开始
1.安装
pip install flask
2.简单使用
创建Flask框架。(社区版没有直接创建的功能,专业版有)
# 导入Flask类库
from flask import Flask
# 创建应用实例
app = Flask(__naem__)
# 视图函数(路由)
@app.route('/')
def index():
return '<h1>Hello Flask!<h1>'
# 启动实施(只在当前模块运行)
if __name__ == '__main__':
看Content-Type 是否是 application/json; 如果是的话就恭喜你 可以接着下一步
查看推送的数据 不管他们的是这么组合的 凡是满足上方条件的就可以接着往下面玩耍
到这里就是编码啦 我先贴出一份代码 在之前要安装好Flask哦 还有我们的requests 、json模型
import json
import requests
from flask import Flask, request
app = Flask(__name__)
@app.post("/saveBaseInfo")
def saveBaseInfo():
# 获取请求体
data = request.get_data()
# 格式化一下
json_data = json.loads(data.decode("utf-8"))
# 这个就是要推送的地址 要注意他们这个地址可以外部访问哈
url = "https://xxx.com/patientTube/savePatientTube"
# 回调按他们网站的Referer写就没有问题
referer = "https://xxx.com/referer"
# 发送response请求
# get_headers()、login(), 都是方法
response = requests.post(url, data=json_data, headers=get_headers(login(), referer))
# 接收结果
json_data_response = json.loads(response.text)
print(json_data_response)
return json_data_response
# 见名 data要按照他们的接口参数写哦 常常按一下F12看看哦 不要照搬哈!
def login():
login_url = "https://xxx.com/login"
data = {"username": "账号",
"password": "密码"}
req = {
"url": login_url,
"method": "post",
"data": data,
"allow_redirects": False # 关闭重定向
}
res = requests.request(**req)
session_id = res.cookies['JSESSIONID']
logging.info("sessionId: " + session_id)
return session_id
# headers是根据他们的网站头去编写的 可以直接去复制
def get_headers(session_id, referer):
headers = {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "keep-alive",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Host": "xxx.com",
"Origin": "https://xxx.com",
"Referer": referer,
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
"Cookie": 'JSESSIONID=' + session_id
}
return headers
🍟 然后Java
🥩介绍
这个就简单了随便写一个Http(s)请求就好了
// 创建一个Json数据
JsonObject jsonObject = Json.createObjectBuilder()
.add("username", "hnpdrds")
.add("password", "hnpdrds123")
.build();
String post = HttpUtil.post("http://localhost:5000/saveBaseInfo", jsonObject.toString());
JSONObject dataJson = JSONObject.parseObject(post);
if (dataJson == null || dataJson.getInteger("code") != 200) {
return null;
}
// 这个的获取就取决于你是这么返回你Python成功的数据了 我是自己返回了他们接口的结构没有统一(Ps:我不想写)
dataJson.get("data");