IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 某网站上传图片返回生成图像的获取 -> 正文阅读

[网络协议]某网站上传图片返回生成图像的获取

写在前面:

本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

目录

写在前面:

一、目标:

二、流程概览

三、分析过程:

1.需做工作:

2.参数获取

参数一:appKey

参数二:imageUrl

参数三:Token

四、编写代码:

1.各个阶段注意事项:

2.完整代码:


一、目标:

本次需要解决的问题是:在网站上传一张图像返回对应生成后的图像,整个过程用python实现

二、流程概览

打开调试界面,上传图片可以发现发送了三个请求,其中upload用于上传图片,appkey是用于获取token,self_cartoon用于获取生成后的图像

整个过程的流程为(分析过程在下面):

1.upload上传图像到该服务器,服务器将该上传的图像保存在服务器并返回给浏览器图像的imageUrl

测试图片:

2.appkey生成appkey和Secret

3.self_cartoon带着生成的appkey和Secret和图片的ID发送请求,服务器返回生成的图像

三、分析过程:

1.需做工作:

先看最后一个请求self_cartoon

在该请求中返回了base64的内容,对其进行解码后返现该图片为已经生成好的图像

观察其请求参数,两个核心参数为appKey和imgUrl:

尝试发现:在如果在请求头中不加Token这个参数,无法获取返回的内容

于是问题就转移为获取appKey,imgaeUrl, token这三个参数

2.参数获取

参数一:appKey

查看上一个请求,在appkey中返回了两个参数:appKey和appSecret,其中appKey与self_cartoon请求的的参数appKey值相同

参数二:imageUrl

在upaload中返回了的fileUrl刚好是self_cartoon请求时的imageUrl

参数三:Token

再次观察self_cartoon这个请求,查看请求对象,从上往下依次点进去寻找:在getappkeyed这个请求中发现一个可疑对象accken:

点进去在362行和363行设置断点后重新上传图片发现debug发现

在继续往下运行可以看到accken的值:

再次查看self_cartoon三个参数可以发现完全吻合,下边就是编写代码的过程了:

四、编写代码:

1.各个阶段注意事项:

upload注意事项:

token注意事项:

2.完整代码:

如下(更改自己的UA)

import requests
import json
import base64
import numpy as np
import cv2
from hashlib import md5
import time
from requests_toolbelt.multipart.encoder import MultipartEncoder
import random

def gen_boundary():
    small = [chr(i) for i in range(97, 123)]  # 小写字母
    big = [chr(i) for i in range(65, 91)]  # 大写字母
    num = [str(i) for i in range(0, 10)]
    c = small+big+num
    boundary=random.sample(c,16)
    s = ''.join(boundary)
    return s


def str2img(pic_str):
    '''
    base64转numpy
    '''
    img_data = base64.b64decode(pic_str)

    nparr = np.fromstring(img_data, np.uint8)
    img_np = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
    return img_np


def get_appKey():
    url = r'https://ai.minivision.cn:18185/api/app/demo/appkey'
    resp = requests.get(url)
    data=resp.json()['data']
    appkey=data['appKey']
    appSecret=data['appSecret']
    return appkey,appSecret


def get_token(appKey,appSecret):
    time_s = int(round(time.time() * 1000))
    data = appKey + "{" + appSecret + ":" + str(time_s) + "}"
    token = md5(data.encode(encoding='UTF-8')).hexdigest()
    return token

def get_imgUrl(img_path):
    headers = {  
        'mvusername': 'mini-ai',
        'origin': 'https://ai.minivision.cn',
        'referer': 'https://ai.minivision.cn/',
        'sysname': 'mini-ai',
        'user-agent': ''
    }
    url = r'https://file.miniclouds.cn:27777/file/upload'

    file_name=img_path.split('\\')[-1]
    fix = 'png' if 'png' in file_name else 'jpg'
    boundary_s=gen_boundary()
    r = MultipartEncoder(
        fields={
            "isHttps": 'true',
            "file": (file_name, open(img_path, 'rb'), f"image/{fix}"),
        },
        boundary = f'------WebKitFormBoundary{boundary_s}'
    )

    headers["content-type"] = r.content_type
    params = {'isHttps': 'true'}
    resp = requests.post(url, data=r, params=params, headers=headers)
    result=resp.json()
    result=json.loads(result)
    file_url = result['resData']['fileUrl']
    return file_url

def get_time():
    time_s = int(round(time.time() * 1000))
    return time_s

def get_cartoon(imgage_path):
    # 第一步:上传图片获取返回的url地址
    image_url=get_imgUrl(imgage_path)

    # 第二步:获取appKey和appSecret
    appKey,appSecret=get_appKey()

    # 第三步:通过appKey和appSecret生成token
    accKen=get_token(appKey,appSecret)

    # 第四步:发送请求卡通的数据,返回生成的卡通图片
    time_s = get_time()
    json={
        "appKey": appKey,
        "filterName": "",
        "imageUrl": image_url,
        "needFilter": "false",
        "timestamp": str(time_s)
    }

    headers={"Token":accKen}
    url=r'https://ai.minivision.cn/apiagw/api/v1/cartoon/self_cartoon'
    resp = requests.post(url=url, json=json,headers=headers)
    cartoon_str = resp.json()["data"]["base64"]
    img_np=str2img(cartoon_str)

    # 第五步:保存生成的卡通图
    cv2.imshow('',img_np)
    cv2.imwrite('cartoon.png',img_np)
    cv2.waitKey(0)

if __name__ == '__main__':
    img_path=r'test.png'
    get_cartoon(img_path)

获取到cartoon.png

再次强调:本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:59:55  更:2022-02-28 16:00:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:28:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码