携带签名发送表单

python主程序

发送表单

复制代码
import requests
import json

url = "http://10.65.6.102/api/environment/add"
headers = {
    # 'content-type': "application/json",
    # 'Connection': 'close',
    'signature': '0JqTXFv7QGqA3RrSkADruUmT85k+4DauRSSVYaAh4iKzs4u//2Ttst4GZ0mbb3lmx6LrxDfokMZcqL4vnB/l9iIQFKCuls7PvbNrgo4Ch1A=',
    'accessKey': 'Jzx7UCA0q7pr1u5l'
}
#signature是一个随机值
#

value_json=json.dumps({"id":"97ae2f14-82bc-4288-9a3d-99cfc1c7aba5","name":"tes111","projectId":"d01b064d-9d61-4ecc-a15a-74f8c5e03420","createUser":"sunlinlin","config":"{\"commonConfig\":{\"requestTimeout\":60000,\"responseTimeout\":60000},\"httpConfig\":{\"isMock\":false,\"conditions\":[{\"protocol\":\"http\",\"port\":\"8100\",\"domain\":\"172.16.64.98\",\"socket\":\"172.16.64.98:8100\",\"time\":1632722704875,\"type\":\"NONE\"}]}}"})  #将字典转成json字符串,注,这个字典的config值是一个json字符串,所以用有斜杠将所有引号转义
files = {'request':('name=request;content-disposition=form-data',value_json, 'application/json')}
# print(type(value_json))
# print(value_json)
# print('\n')
# print(type(files))
# print(files)
r = requests.post(url,headers=headers,files=files)

print(r)
print(r.text)

#下面是发送普通表单,后续再整理一下
# import requests 
# import json
# import os 

# payload = {"param_1": "value_1", "param_2": "value_2"}

# filepath = '/file/path/to/local_file.zip'

# data = {'json': ('some-json', json.dumps(payload), 'application/json'),
#         'file': (os.path.basename(filepath), open(filepath, 'rb'), 'application/octet-stream')}

# response = requests.post('http://127.0.0.1:80/', files = data)
复制代码

 

signature 生成方法:

bat 脚本执行java代码

javac  -cp  commons-codec-1.15.jar;  MeterSphereSignatureTest.java
java  -cp  commons-codec-1.15.jar;  MeterSphereSignatureTest

pause

 

java代码  #后续整理成python代码

复制代码
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.UUID;

public class MeterSphereSignatureTest {

    private static final String accessKey = "Jzx7UCA0q7pr1u5l";
    private static final String secretKey = "W6bkS4DbFqqa8P48";

    private static String aesEncrypt(String src, String secretKey, String iv) throws Exception {
        byte[] raw = secretKey.getBytes(StandardCharsets.UTF_8);
        SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        IvParameterSpec iv1 = new IvParameterSpec(iv.getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, iv1);
        byte[] encrypted = cipher.doFinal(src.getBytes(StandardCharsets.UTF_8));
        return Base64.encodeBase64String(encrypted);
    }

    public static void main(String[] args) {
        try {
            String signature = aesEncrypt(accessKey + "|" + UUID.randomUUID().toString() + "|" + System.currentTimeMillis(), secretKey, accessKey);
            System.out.println(signature);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
复制代码

 

posted @   seven1986  阅读(48)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示