当前位置: 首页 > news >正文

记录获取蓝鲸智云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版本环境&#xff1a;3.11 # -*- coding: utf-8 -*- import requestsdef get_user_token(domain,user,password):模拟用户登录&#xff0c;并返回 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进行安装的&#xff0c;所有的配置参考&#xff1a;docker安装Apache NIFI 需求背景 现在有一个文件&#xff0c;里面存储的是一些json格式的数据&#xff0c;要求将文件中的数据存入数据库表中&#xff0c;以下是一些模拟的数据和对应的数据库…...

【canal系】canal集群异常Could not find first log file name in binary log index file

这里先说明下这边使用的canal版本号为1.1.5 在描述这个问题之前&#xff0c;首先需要简单对于canal架构有个基本的了解 canal工作原理 canal 模拟 MySQL slave 的交互协议&#xff0c;伪装自己为 MySQL slave &#xff0c;向 MySQL master 发送dump 协议MySQL master 收到 dum…...

ESP32C3 PWM输出

目前对于遥控双发差速小飞机计划采用如下架构&#xff1a; ESP32C3做主控&#xff0c;兼具遥控收发和飞行控制锂电池供电&#xff0c;带电量检测双发&#xff0c;720空心杯电机&#xff0c;55mm桨&#xff0c;带电流检测MPU6050加速度计和陀螺仪预留4个控制信号输出 马达控制要…...

二、GoLang输出HelloWorld、基本数据类型、变量常量定义、基本类型转换

一、输入Hello World go语言中&#xff0c;想要输出内容到控制台&#xff0c;package必须是main&#xff0c;包括方法名也必须是main&#xff0c; go语言输出的语法是 fmt 库。 package mainimport "fmt"func main() {// go语言中 输出内容 使用的库是 fmt库fmt.Pr…...

mojo初体验

目录标题 mojo初体验试用地址变量定义参数可变性和所有权Structures后续 mojo初体验 试用地址 https://www.modular.com/get-started 与python基础语法很相似。 变量定义 let定义不可变变量var定义可变变量 参数可变性和所有权 下面是一个基本的函数&#xff1a; fn add…...

python3 重启docker方法

一、工作中的问题 工作中进行测试时&#xff0c;需要修改nacos配置&#xff0c;修改完成后再重启对应的docker容器&#xff0c;让配置生效&#xff0c;研究了下&#xff0c;使用docker库可以做到。 如何修改nacos配置可以参见我的另一篇文章&#xff0c;传送门 python3 修改…...

【js】js中深拷贝与浅拷贝:

文章目录 一、浅拷贝&#xff08;修改新对象会改到原对象&#xff09;【1】通过 直接赋值【2】Object.assign&#xff08;&#xff09;方法 二、深拷贝&#xff08;修改新对象不会改到原对象&#xff09;【1】通过JSON对象来实现深拷贝【2】 Object.create&#xff08;&#xf…...

大文件上传demo,前端基于Uppy,后端基于koa

前言 文件上传基本上所有的管理系统之类的项目都有这么一个功能。因为使用了Element&#xff0c;可以方便的使用 其提供的Upload组件&#xff0c;对于普通上传来说基本上就够用了。但是有时候会涉及到大文件上传的需求&#xff0c;这时就会面临一些问题&#xff1a;比如文件上…...

typeScript--[函数定义]

一.TypesScript 函数的定义 函数的定义包括两种类型&#xff1a;函数声明和函数表达式。 1.函数声明 function hello(): string {return "hello" } 2.函数表达式 var hello1 function (): string {return "hello" } 二.函数之可选参数 参数后面的限…...

Spring初始化项目

1、官网用法 访问地址&#xff1a;https://start.spring.io idea配置&#xff1a;https://start.spring.io 2、阿里巴巴加速 访问地址&#xff1a;https://start.aliyun.com/bootstrap.html idea配置&#xff1a;https://start.aliyun.com 3、区别 官网阿里巴巴版本最新稍…...

Opencv 图像金字塔----高斯和拉普拉斯

原文&#xff1a;图像金字塔----高斯和拉普拉斯 图像金字塔是图像中多尺度表达的一种&#xff0c;最初用于机器视觉和图像压缩&#xff0c;最主要用于图像的分割、融合。 高斯金字塔 ( Gaussian pyramid): 高斯金字塔是由底部的最大分辨率图像逐次向下采样得到的一系列图像…...

gitLab(git)误提交命令

1.先使用下面命令查看一下分支上已提交的信息 git log 2.回退到之前的版本 git reset —hard 你要删除的提交哈希码&#xff08;一般是离这个命令最近的一串数字&#xff09; 3.覆盖掉远端的版本信息&#xff0c;使远端的仓库也回退到相应的版本 注意&#xff1a;切换到你提…...

Rust个人学习笔记2

一定要牢记Rust是基于表达式的语言&#xff0c;除了声明语句和表达式语句外&#xff0c;其他的都是表达式。所以if也是表达式&#xff0c;它可以被用作右值。 条件控制 if-else。cpp和python得结合。 fn main() {let number 34;if number < 0 {println!("number &l…...

深入浅出Android同步屏障机制

原文链接 Android Sync Barrier机制 诡异的假死问题 前段时间&#xff0c;项目上遇到了一个假死问题&#xff0c;随机出现&#xff0c;无固定复现规律&#xff0c;大量频繁随机操作后&#xff0c;便会出现假死&#xff0c;整个应用无法操作&#xff0c;不会响应事件&#xff…...

工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…...

Python 专栏目录索引

文章目录 Python 环境搭建Python 语法 变量、print、注释和运算符Python 的基本结构Python 中的文件和文件夹操作Python 中常用库Python 常见问题及解决方案Python 应用实例 Python 环境搭建 vscode搭建Python环境 Python 语法 变量、print、注释和运算符 python语法 变量、…...

SSM学习

技术架构 crm的技术架构: 视图层(view):展示数据&#xff0c;跟用户交互。 html, css,js,jquery,bootstrap(ext / easyUI),jsp控制层(Controller):控制业客处理流程(接收请求,接收参数,封装参数;根据不同的请求调用业务 (servlet, ) springMVC ( , webwork,strutsl,struts2)业…...

.net项目部署Docker

1、项目生成的bin目录下创建Dockerfile文件 #运行环境描述&#xff0c;此处是用的Net5构建镜像 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build #复制文件到 docker容器中的app文件夹中 COPY . /app #设置工作目录为 app 文件夹&#xff0c;要和上面一致哦 WORKDIR /app #设…...

如何让AI帮你读完100篇文献,并写出综述的核心内容?

对于每一位科研工作者而言&#xff0c;面对一个新的课题或研究方向&#xff0c;最让人望而生畏的往往不是实验本身&#xff0c;而是前期那如山般堆积的文献调研。当你需要在短时间内读完100篇甚至更多核心文献&#xff0c;并从中提炼出逻辑严密、观点独到的综述核心内容时&…...

Shell脚本实战指南:从零基础到自动化高手

1. Shell脚本入门&#xff1a;从Hello World到实战 第一次接触Shell脚本时&#xff0c;我和大多数人一样&#xff0c;被那些神秘的符号和命令搞得一头雾水。直到我意识到&#xff0c;Shell脚本其实就是把平时在终端里手动输入的命令&#xff0c;写进一个文件里自动执行。举个例…...

SDMatte与LSTM时序模型结合:处理视频连续帧的稳定抠图

SDMatte与LSTM时序模型结合&#xff1a;处理视频连续帧的稳定抠图 1. 引言&#xff1a;视频抠图的挑战与机遇 视频抠图技术一直是影视后期和直播领域的核心需求。传统方法在处理动态场景时常常面临边缘闪烁、细节丢失和时间不一致等问题。想象一下&#xff0c;当你在视频会议…...

基于ROS的语音控制机器人(一):从零搭建多模态交互系统

1. 从零搭建ROS语音控制机器人的核心思路 第一次接触ROS机器人开发时&#xff0c;我被其分布式架构深深吸引。想象一下&#xff1a;你对着电脑说"前进"&#xff0c;树莓派就能驱动小车移动&#xff1b;喊"打开摄像头"&#xff0c;机器人立即开启视觉识别—…...

墨语灵犀基础教程:择源/挥毫/化境/出岫四步完成高质量AI翻译

墨语灵犀基础教程&#xff1a;择源/挥毫/化境/出岫四步完成高质量AI翻译 1. 认识墨语灵犀&#xff1a;不只是翻译&#xff0c;更是数字书童 墨语灵犀是一款基于先进AI技术的深度翻译工具&#xff0c;它将现代翻译技术与古典美学完美融合。这不是一个普通的翻译软件&#xff0…...

Cowabunga Lite:iOS系统个性化定制的免越狱解决方案

Cowabunga Lite&#xff1a;iOS系统个性化定制的免越狱解决方案 【免费下载链接】CowabungaLite iOS 15 Customization Toolbox 项目地址: https://gitcode.com/gh_mirrors/co/CowabungaLite 在iOS生态系统中&#xff0c;用户对系统个性化的需求与日俱增&#xff0c;但传…...

Java开源项目—上门家政系统源码

首页与服务展示LBS定位服务&#xff1a; 系统自动定位用户所在城市&#xff08;如“广州”&#xff09;&#xff0c;并根据地理位置推荐附近的服务资源&#xff0c;确保服务的时效性。多品类服务入口&#xff1a; 首页采用图标矩阵展示&#xff0c;涵盖家庭保洁、上门维修、家电…...

Zap vs Go:终极后端性能对比测试与实战分析

Zap vs Go&#xff1a;终极后端性能对比测试与实战分析 【免费下载链接】zap blazingly fast backends in zig 项目地址: https://gitcode.com/gh_mirrors/zap/zap Zap 作为一款基于 Zig 语言开发的后端框架&#xff0c;以其 "blazingly fast backends" 为核心…...

STM32实战指南_基于STM32F103的智能交通灯系统设计与实现(硬件+软件+调试)

1. 项目背景与需求分析 十字路口的交通拥堵是城市治理的经典难题。传统定时切换的交通灯就像个固执的老头子&#xff0c;不管车多车少都按固定节奏工作&#xff0c;经常出现一边排长龙、另一边空荡荡的尴尬场景。这次我们要用STM32F103这颗"最强大脑"给交通灯装上&qu…...

Pixel Mind Decoder 效果对比评测:在不同文体和语言风格下的表现

Pixel Mind Decoder 效果对比评测&#xff1a;在不同文体和语言风格下的表现 1. 核心能力概览 Pixel Mind Decoder 是一款专注于文本情绪解码的模型&#xff0c;能够识别和分析不同文本中蕴含的情感倾向。与通用情感分析工具不同&#xff0c;它特别擅长处理复杂语境下的微妙情…...