介绍

需要在项目的自动构建流程中集成乐变上传与上线功能,相关功能都需要从命令行使用;但是由于乐变未提供 API,因此只能手工摸拟 HTTP 请求完成相应操作。

思路

使用 Charles 抓包工具对每一个操作进行抓包,然后可以将请求拷贝为 cURL 命令,再通过 cURL to Python requests 工具 将命令转换为 Python 代码。

分析每一个请求

  1. 将需要的参数提取出来,做成变量由外部配置传入。
  2. 网页里的参数需要解析对应的网页,使用正则表达式找出对应的值,然后保存并传递给其他请求。

注意:登录请求的结果是使用 JavaScript 触发跳转,导致浏览器开发工具中只能抓取当前网页的加载信息,导致无法看到登录信息,因此只能使用抓包工具进行抓包。

1
2
http://www.loveota.com/login.php
<script language="javascript">window.location.href = "sdkwelcome.php";</script>

环境

  • Python 2.7
  • Requests 2.19.1
  • macOS 10.13.4
  • Windows 7

方案

Requests 库

注意,由于国内网络原因、操作系统等各方面原因,通过 pip 或 pipenv 安装此库并不方便;同时为了整个构建系统的完整性,需要将库嵌入到仓库中。代码可以直接从 requests/requests: Python HTTP Requests for Humans™ ✨🍰✨ 下载。

Embedding a Python library in my own package - Stack Overflow

参数处理

Cookies 需要从 login 请求中获取,然后传递给后续的所有操作。

Headers 中的参数都要检查,去除无用的参数。

上传文件时要注意除了文件之外还有两个额外的参数需要传递。

POST a Multipart-Encoded File - Quickstart — Requests 2.19.1 documentation

所有的操作都要检查返回值,包括 HTTP Response Code 与 JSON 中的 code 值。

检查包的 Bundle ID 是否是第一次提交,是的话创建新渠道,否的话更新渠道。

需要额外处理通用渠道包(PATCH_V3)版本,相关请求的参数不同。

参考资料