记录获取蓝鲸智云token的过程
一、使用python脚本获取蓝鲸智云token
python版本环境:3.11
# -*- coding: utf-8 -*-
import requestsdef get_user_token(domain,user,password):'''模拟用户登录,并返回 bk_token 和 bk_csrftoken'''BK_PAAS_HOST = domainUSERNAME = userPASSWORD = passwordresponse = requests.get('{0}/login/?c_url=/'.format(BK_PAAS_HOST), verify=False)bklogin_csrftoken = response.cookies.get('bklogin_csrftoken')url = "{0}/login/?c_url=/".format(BK_PAAS_HOST)headers = {"Host": BK_PAAS_HOST.split("//")[1],"Origin": BK_PAAS_HOST,"Referer": "{0}/login/?c_url=/".format(BK_PAAS_HOST),"Cookie": "bklogin_csrftoken={}".format(bklogin_csrftoken),'Content-Type': 'application/x-www-form-urlencoded'}data = {"csrfmiddlewaretoken": bklogin_csrftoken,"username": USERNAME,"password": PASSWORD,}req2 = requests.post(url=url,data=data,headers=headers,verify=False,allow_redirects=False)bk_token = req2.cookies.get("bk_token")bk_csrftoken = req2.cookies.get("bklogin_csrftoken")return bk_token, bk_csrftokenaaa,bbb = get_user_token('http://XXX.com','***','***')
print('bk_token',aaa)
print('bk_csrftoken',bbb)
二、需要将python脚本转化为java代码
注:我们注意到在python脚本中,为获取登录token需要对同一个登录地址做了两次请求:
在第一次get请求中,我们从响应体的cookie中获取到了bklogin_csrftoken参数的值。
在第二次进行post请求时,需要将bklogin_csrftoken的值放入到请求头的Cookie中,并且Post请求需要做ssl安全验证。
此时对同一个登录地址需要从get请求转换到post请求,这时会存在两个问题,
问题一:HTTP的响应码会返回302或者307,文章末尾会附上对这两个状态码的解释,设置请求禁止HTTP重定向,对应脚本中对应的 allow_redirects=False。
问题二:如果不设置SSL信任所有证书,就会存在证书验证不通过。但是不建议完全信任所有SSL证书,因为这会降低安全性。通常,应该使用合适的证书来验证SSL连接,对应脚本中verify=False。
因此我们需要在java代码中处理连接请求设置SSL认证和禁止重定向。
代码如下:
import okhttp3.*;import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;public class OkHttpExample {public static void main(String[] args) {String domain = "http://***.com";String url = "http://***.com/login/?c_url=/";String bklogin_csrftoken = "";String username = "***";String password = "***";String bk_token = "";try {// 创建信任所有证书的TrustManagerTrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}public void checkClientTrusted(X509Certificate[] certs, String authType) {}public void checkServerTrusted(X509Certificate[] certs, String authType) {}}};// 创建SSL上下文,信任所有证书SSLContext sslContext = SSLContext.getInstance("TLS");sslContext.init(null, trustAllCerts, new java.security.SecureRandom());// 设置SSL Socket Factory,信任所有证书SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();OkHttpClient.Builder builder = new OkHttpClient.Builder();// 设置SSL Socket Factorybuilder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]);// 禁止HTTP重定向builder.followRedirects(false);OkHttpClient client = builder.build();// 创建GET请求Request request = new Request.Builder().url(url).build();// 执行GET请求Response response = client.newCall(request).execute();if (response.isSuccessful()) {// 获取响应中的所有CookieString cookies = response.header("set-cookie");bklogin_csrftoken = extractCsrfToken(response.headers(), "bklogin_csrftoken=");// 打印Cookie信息System.out.println("Cookies: " + cookies);} else {System.out.println("Request was not successful. Response code: " + response.code());}// 创建POST请求RequestBody requestBody = new FormBody.Builder().add("csrfmiddlewaretoken", bklogin_csrftoken).add("username", username).add("password", password).build();Request request2 = new Request.Builder().url(url).addHeader("Cookie", "bklogin_csrftoken=" + bklogin_csrftoken).addHeader("Content-Type", "application/x-www-form-urlencoded").post(requestBody).build();// 执行POST请求Response response2 = client.newCall(request2).execute();bk_token = extractCsrfToken(response2.headers(), "bk_token=");System.out.println("bk_token =" + bk_token);} catch (IOException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (KeyManagementException e) {e.printStackTrace();}}private static String extractCsrfToken(Headers headers, String nameValue) {for (int i = 0; i < headers.size(); i++) {String name = headers.name(i);String value = headers.value(i);if ("set-cookie".equalsIgnoreCase(name) && value.startsWith(nameValue)) {String[] parts = value.split(";");for (String part : parts) {if (part.startsWith(nameValue)) {return part.substring(nameValue.length());}}}}return null;}
}
打印结果:
Cookies: bklogin_csrftoken=UJ2W48tw******ftsmnSpScu*******AOcJIduYnGwt3a2oE8B; expires=Wed, 04 Sep 2024 07:29:08 GMT; Max-Age=31449600; Path=/; SameSite=Lax
bk_token =bkcrypt%24gAAAAABk-CpELzYtclVMOivK8obn3V*******NDqeOE6TxUiTA******MRx6pMrIbT7NTDoGyk-LuocQEyL8N5vN3pk7Vc%3D
请求蓝鲸智云接口时,请求头 需要带上Cookie参数,如下:

参数格式: Cookie:bk_token=****
302 与 303、307 的关系
区别
从实际效果看,302 允许各种各样的重定向,一般情况下都会实现为到 GET 的重定向,但是不能确保 POST 会重定向为 POST;而 303 只允许任意请求到 GET 的重定向;307 和 302 一样,除了不允许 POST 到 GET 的重定向。
那为什么有了 307 和 303 还需要 302呢?
302 在最初的定义中,内容和现在的 307 是一样的,不允许重定向方法的改写(从 POST 到 GET,由于 GET 不应该有 body,实际上 body 也被改了)。但是早期浏览器在实现的时候有的实现成 303 的效果,有的实现成 307 的效果。于是在之后的标准,302 在某些浏览器中错误的实现被写进规范,成为 303,而 302 原本的效果被复制了到了 307。在最近的一次标准修订中,302 标准被修改成不再强制需要维持原请求的方法。所以就产生了现在的 302、303 和 307 。
相关文章:
记录获取蓝鲸智云token的过程
一、使用python脚本获取蓝鲸智云token python版本环境:3.11 # -*- coding: utf-8 -*- import requestsdef get_user_token(domain,user,password):模拟用户登录,并返回 bk_token 和 bk_csrftokenBK_PAAS_HOST domainUSERNAME userPASSWORD password…...
C语言AES加密解密字符串与16进制数据
文章目录 AES介绍C语言加密库加密解密16进制数据加密解密字符串数据base64编码aes加密字符串aes解密字符串解密中文字符加密库源代码AES介绍 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标…...
NIFI实现JSON转SQL并插入到数据库表中
说明 本文中的NIFI是使用docker进行安装的,所有的配置参考:docker安装Apache NIFI 需求背景 现在有一个文件,里面存储的是一些json格式的数据,要求将文件中的数据存入数据库表中,以下是一些模拟的数据和对应的数据库…...
【canal系】canal集群异常Could not find first log file name in binary log index file
这里先说明下这边使用的canal版本号为1.1.5 在描述这个问题之前,首先需要简单对于canal架构有个基本的了解 canal工作原理 canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议MySQL master 收到 dum…...
ESP32C3 PWM输出
目前对于遥控双发差速小飞机计划采用如下架构: ESP32C3做主控,兼具遥控收发和飞行控制锂电池供电,带电量检测双发,720空心杯电机,55mm桨,带电流检测MPU6050加速度计和陀螺仪预留4个控制信号输出 马达控制要…...
二、GoLang输出HelloWorld、基本数据类型、变量常量定义、基本类型转换
一、输入Hello World go语言中,想要输出内容到控制台,package必须是main,包括方法名也必须是main, go语言输出的语法是 fmt 库。 package mainimport "fmt"func main() {// go语言中 输出内容 使用的库是 fmt库fmt.Pr…...
mojo初体验
目录标题 mojo初体验试用地址变量定义参数可变性和所有权Structures后续 mojo初体验 试用地址 https://www.modular.com/get-started 与python基础语法很相似。 变量定义 let定义不可变变量var定义可变变量 参数可变性和所有权 下面是一个基本的函数: fn add…...
python3 重启docker方法
一、工作中的问题 工作中进行测试时,需要修改nacos配置,修改完成后再重启对应的docker容器,让配置生效,研究了下,使用docker库可以做到。 如何修改nacos配置可以参见我的另一篇文章,传送门 python3 修改…...
【js】js中深拷贝与浅拷贝:
文章目录 一、浅拷贝(修改新对象会改到原对象)【1】通过 直接赋值【2】Object.assign()方法 二、深拷贝(修改新对象不会改到原对象)【1】通过JSON对象来实现深拷贝【2】 Object.create(…...
大文件上传demo,前端基于Uppy,后端基于koa
前言 文件上传基本上所有的管理系统之类的项目都有这么一个功能。因为使用了Element,可以方便的使用 其提供的Upload组件,对于普通上传来说基本上就够用了。但是有时候会涉及到大文件上传的需求,这时就会面临一些问题:比如文件上…...
typeScript--[函数定义]
一.TypesScript 函数的定义 函数的定义包括两种类型:函数声明和函数表达式。 1.函数声明 function hello(): string {return "hello" } 2.函数表达式 var hello1 function (): string {return "hello" } 二.函数之可选参数 参数后面的限…...
Spring初始化项目
1、官网用法 访问地址:https://start.spring.io idea配置:https://start.spring.io 2、阿里巴巴加速 访问地址:https://start.aliyun.com/bootstrap.html idea配置:https://start.aliyun.com 3、区别 官网阿里巴巴版本最新稍…...
Opencv 图像金字塔----高斯和拉普拉斯
原文:图像金字塔----高斯和拉普拉斯 图像金字塔是图像中多尺度表达的一种,最初用于机器视觉和图像压缩,最主要用于图像的分割、融合。 高斯金字塔 ( Gaussian pyramid): 高斯金字塔是由底部的最大分辨率图像逐次向下采样得到的一系列图像…...
gitLab(git)误提交命令
1.先使用下面命令查看一下分支上已提交的信息 git log 2.回退到之前的版本 git reset —hard 你要删除的提交哈希码(一般是离这个命令最近的一串数字) 3.覆盖掉远端的版本信息,使远端的仓库也回退到相应的版本 注意:切换到你提…...
Rust个人学习笔记2
一定要牢记Rust是基于表达式的语言,除了声明语句和表达式语句外,其他的都是表达式。所以if也是表达式,它可以被用作右值。 条件控制 if-else。cpp和python得结合。 fn main() {let number 34;if number < 0 {println!("number &l…...
深入浅出Android同步屏障机制
原文链接 Android Sync Barrier机制 诡异的假死问题 前段时间,项目上遇到了一个假死问题,随机出现,无固定复现规律,大量频繁随机操作后,便会出现假死,整个应用无法操作,不会响应事件ÿ…...
工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计
鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管…...
Python 专栏目录索引
文章目录 Python 环境搭建Python 语法 变量、print、注释和运算符Python 的基本结构Python 中的文件和文件夹操作Python 中常用库Python 常见问题及解决方案Python 应用实例 Python 环境搭建 vscode搭建Python环境 Python 语法 变量、print、注释和运算符 python语法 变量、…...
SSM学习
技术架构 crm的技术架构: 视图层(view):展示数据,跟用户交互。 html, css,js,jquery,bootstrap(ext / easyUI),jsp控制层(Controller):控制业客处理流程(接收请求,接收参数,封装参数;根据不同的请求调用业务 (servlet, ) springMVC ( , webwork,strutsl,struts2)业…...
.net项目部署Docker
1、项目生成的bin目录下创建Dockerfile文件 #运行环境描述,此处是用的Net5构建镜像 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build #复制文件到 docker容器中的app文件夹中 COPY . /app #设置工作目录为 app 文件夹,要和上面一致哦 WORKDIR /app #设…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)
旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…...
