Postwoman是一款开源的 Postman 替代品

介绍

Postwoman是一款开源的 Postman 替代品:

  • 轻盈,可直接在线访问;
  • 简约,采用简约的 UI 设计精心打造;
  • 支持 GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH 方法;
  • 支持验证;
  • 实时,发送请求即可获取响应。

体验demo:postwoman.io

 Github

https://github.com/liyasthomas/postwoman
1584940378-5696-59de05539e1adfdb42d989f-720w

 功能

先来看看它支持的功能列表:

  • 💚 开源
  • 🔥 运行在浏览器端
  • 🚀 支持多平台、多设备
  • 📱 支持PWA
  • 🔌 WebSocket 测试
  • 🌈 定制化
  • ⏰ 历史记录
  • 📁 集合
  • 🌐 代理
  • 📜 请求前脚本和环境变量
  • 🐳 Docker

使用

git clone https://github.com/liyasthomas/postwoman.git
npm install
npm run dev

//打开浏览器即可
//或者,使用docker-compose:

#pull
docker pull liyasthomas/postwoman
#run
docker run -p 3000:3000 liyasthomas/postwoman:latest
#build
docker build -t postwoman:latest

# 界面截图

几个常用的快捷键:

发送请求:ctrl+G

保存到收藏夹:ctrl+S

复制请求链接:ctrl+K

重置请求链接:ctrl+L

PHP实现zip压缩的代码

直接上代码

/**
 * Class xZip
 *
 * $xZip = new xZip;
 * $xZip->zip(null, 'D:/www/log/index.php', 'D:/www/log/index.zip');
 * $xZip->zipAll(array('D:/www/log/index.php','D:/www/log/lottery.sql'),  'D:/www/log/index_all.zip');
 *
 */
class xZip
{
    public function __construct()
    {
    }


    /**
     * add multi file to ZIP file
     * @param array $source will be add to ZIP file list.
     * @param null $destination ZIP file path
     * @return null $destination
     * @throws Exception
     */
    public function zipAll($source = array(), $destination = null, $originPath = '')
    {
        if ($destination == null) {
            throw new Exception('param $destination must be not null.');
        }
        if (count($source) == 0) {
            throw new Exception('must be added one file.');
        }
        $zip = new ZipArchive;
        @mkdir($this->getParentPath($destination), 0777, true);
        $res = $zip->open($destination, ZipArchive::CREATE);
        if ($res != true) {
            throw new Exception('open zip(' . $destination . ') file error[' . $res . '].');
        }
        foreach ($source as $path) {
            $zip->addFile($path, iconv('UTF-8', 'GB2312', str_replace($originPath, NULL, $path)));
        }
        $zip->close();
        return $destination;
    }

    /**
     * add one file to ZIP file.
     * @param null $zip @ZipArchive object
     * @param null $source will be add to ZIP file.
     * @param null $destination dest ZIP file.
     * @return null $destination
     * @throws Exception
     */
    public function zip($zip = null, $source = null, $destination = null)
    {
        if ($destination == null) {
            throw new Exception('param $destination must be not null.');
        }
        if ($source == null) {
            throw new Exception('must be added one file.');
        }
        if ($zip == null) {
            $zip = new ZipArchive;
            @mkdir($this->getParentPath($destination), 0777, true);
            $res = $zip->open($destination, ZipArchive::CREATE);
            if ($res != true) {
                throw new Exception('open zip(' . $destination . ') file error[' . $res . '].');
            }
        }
        //iconv('UTF-8','GB2312',str_replace($this->getParentPath($source).'/', NULL, $source)
        $zip->addFile($source, str_replace($this->getParentPath($source) . '/', NULL, $source));
        $zip->close();
        return $destination;
    }

    /**
     * @param $source zip file path
     * @param $destination dest directory path
     */
    public function unzip($source, $destination)
    {
        @mkdir($destination, 0777, true);
        $zip = new ZipArchive;
        if ($zip->open($source) === true) {
            $zip->extractTo($destination);
            $zip->close();
        }
    }

    public function __destruct()
    {
    }

    private function getParentPath($destination)
    {
        $path = substr($destination, 0, strripos($destination, '/'));
        return $path;
    }
}

PHP实现文件下载

简单的示例代码:

function downloadFile($filePath)
{

    set_time_limit(0);

    if (substr($filePath, strlen($filePath) - 1) == '/') {
        $filePath = substr($filePath, 0, strlen($filePath) - 1);
    }

    if (!is_file($filePath) && !is_readable($filePath)) {
        return false;
    }
    $obj = new SplFileInfo($filePath);
    header('Content-Type: application/octet-stream');
    header('Accept-Ranges:bytes');
    header('Content-Length:' . filesize($filePath)); //注意是'Content-Length:' 非Accept-Length
    header('Content-Disposition:attachment;filename=' . $obj->getFilename());//声明作为附件处理和下载后文件的名称

    $buffer = 1024;
    ob_clean();
    $handle = fopen($filePath, 'rb');
    while (!feof($handle)) {
        echo fread($handle, $buffer);
    }
    flush();
    fclose($handle);
    exit;

}

主要是设置header头:

文件类型:Content-Type: application/octet-stream

字节流:Accept-Ranges:bytes

长度:Content-Length:>0

声明作为附件处理和下载后文件的名称:

Content-Disposition:attachment;filename=FILENAME

 

*最重要的是 ob_clean();跟flush();

如果没有这两个函数,有可能下载下来的文件就是损坏的。

HTTP状态码(记录)

HTTP状态码总的分为五类:

1开头:信息状态码

2开头:成功状态码

3开头:重定向状态码

4开头:客户端错误状态码

5开头:服务端错误状态码

 1XX:信息状态码

状态码 含义 描述
100 继续 初始的请求已经接受,请客户端继续发送剩余部分
101 切换协议 请求这要求服务器切换协议,服务器已确定切换

 2XX:成功状态码

状态码 含义 描述
200 成功 服务器已成功处理了请求
201 已创建 请求成功并且服务器创建了新的资源
202 已接受 服务器已接受请求,但尚未处理
203 非授权信息 服务器已成功处理请求,但返回的信息可能来自另一个来源
204 无内容 服务器成功处理了请求,但没有返回任何内容
205 重置内容 服务器处理成功,用户终端应重置文档视图
206 部分内容 服务器成功处理了部分GET请求

3XX:重定向状态码

状态码 含义 描述
300 多种选择 针对请求,服务器可执行多种操作
301 永久移动 请求的页面已永久跳转到新的url
302 临时移动 服务器目前从不同位置的网页响应请求,但请求仍继续使用原有位置来进行以后的请求
303 查看其他位置 请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码
304 未修改 自从上次请求后,请求的网页未修改过
305 使用代理 请求者只能使用代理访问请求的网页
307 临时重定向 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求

4XX:客户端错误状态码

状态码 含义 描述
400 错误请求 服务器不理解请求的语法
401 未授权 请求要求用户的身份演验证
403 禁止 服务器拒绝请求
404 未找到 服务器找不到请求的页面
405 方法禁用 禁用请求中指定的方法
406 不接受 无法使用请求的内容特性响应请求的页面
407 需要代理授权 请求需要代理的身份认证
408 请求超时 服务器等候请求时发生超时
409 冲突 服务器在完成请求时发生冲突
410 已删除 客户端请求的资源已经不存在
411 需要有效长度 服务器不接受不含有效长度表头字段的请求
412 未满足前提条件 服务器未满足请求者在请求中设置的其中一个前提条件
413 请求实体过大 由于请求实体过大,服务器无法处理,因此拒绝请求
414 请求url过长 请求的url过长,服务器无法处理
415 不支持格式 服务器无法处理请求中附带媒体格式
416 范围无效 客户端请求的范围无效
417 未满足期望 服务器无法满足请求表头字段要求

 

5XX:服务端错误状态码

状态码 含义 描述
500 服务器错误 服务器内部错误,无法完成请求
501 尚未实施 服务器不具备完成请求的功能
502 错误网关 服务器作为网关或代理出现错误
503 服务不可用 服务器目前无法使用
504 网关超时 网关或代理服务器,未及时获取请求
505 不支持版本 服务器不支持请求中使用的HTTP协议版本

IntelliJ IDEA 常用快捷键Mac篇

在 IntelliJ IDEA 中有两个 Mac 版本的快捷键,分别为 Mac OS X 和 Mac OS X 10.5+, 其中 Mac OS X 10.5+ 为 IntelliJ IDEA 默认的快捷键版本。此外,建议将 Mac 系统中与 IntelliJ IDEA 冲突的快捷键取消或更改,不建议改 IntelliJ IDEA 的默认快捷键。

Mac 键盘符号和修饰键说明

  •  ——> Command
  •  ——> Shift
  •  ——> Option
  •  ——> Control
  • ↩︎ ——> Return/Enter
  •  ——> Delete
  •  ——> 向前删除键(Fn + Delete)
  •  ——> 上箭头
  •  ——> 下箭头
  •  ——> 左箭头
  •  ——> 右箭头
  •  ——> Page Up(Fn + ↑)
  •  ——> Page Down(Fn + ↓)
  •  ——> 右制表符(Tab键)
  •  ——> 左制表符(Shift + Tab)
  •  ——> Escape(Esc)
  • End ——> Fn + →
  • Home ——> Fn + ←

Part 1:Editing(编辑)

快捷键 作用
Control + Space 基本的代码补全(补全任何类、方法、变量)
Control + Shift + Space 智能代码补全(过滤器方法列表和变量的预期类型)
Command + Shift + Enter 自动结束代码,行末自动添加分号
Command + P 显示方法的参数信息
Control + J 快速查看文档
Shift + F1 查看外部文档(在某些代码上会触发打开浏览器显示相关文档)
Command + 鼠标放在代码上 显示代码简要信息
Command + F1 在错误或警告处显示具体描述信息
Command + NControl + EnterControl + N 生成代码(gettersetterhashCodeequalstoString、构造函数等)
Control + O 覆盖方法(重写父类方法)
Control + I 实现方法(实现接口中的方法)
Command + Option + T 包围代码(使用if...elsetry...catchforsynchronized等包围选中的代码)
Command + / 注释 / 取消注释与行注释
Command + Option + / 注释 / 取消注释与块注释
Option + 方向键上 连续选中代码块
Option + 方向键下 减少当前选中的代码块
Control + Shift + Q 显示上下文信息
Option + Enter 显示意向动作和快速修复代码
Command + Option + L 格式化代码
Control + Option + O 优化 import
Control + Option + I 自动缩进线
Tab / Shift + Tab 缩进代码 / 反缩进代码
Command + X 剪切当前行或选定的块到剪贴板
Command + C 复制当前行或选定的块到剪贴板
Command + V 从剪贴板粘贴
Command + Shift + V 从最近的缓冲区粘贴
Command + D 复制当前行或选定的块
Command + Delete 删除当前行或选定的块的行
Control + Shift + J 智能的将代码拼接成一行
Command + Enter 智能的拆分拼接的行
Shift + Enter 开始新的一行
Command + Shift + U 大小写切换
Command + Shift + ] / Command + Shift + [ 选择直到代码块结束 / 开始
Option + Fn + Delete 删除到单词的末尾
Option + Delete 删除到单词的开头
Command + 加号 / Command + 减号 展开 / 折叠代码块
Command + Shift + 加号 展开所以代码块
Command + Shift + 减号 折叠所有代码块
Command + W 关闭活动的编辑器选项卡

Part 2:Search / Replace(查询/替换)

快捷键 作用
Double Shift 查询任何东西
Command + F 文件内查找
Command + G 查找模式下,向下查找
Command + Shift + G 查找模式下,向上查找
Command + R 文件内替换
Command + Shift + F 全局查找(根据路径)
Command + Shift + R 全局替换(根据路径)
Command + Shift + S 查询结构(Ultimate Edition 版专用,需要在 Keymap 中设置)
Command + Shift + M 替换结构(Ultimate Edition 版专用,需要在 Keymap 中设置)

Part 3:Usage Search(使用查询)

快捷键 作用
Option + F7 / Command + F7 在文件中查找用法 / 在类中查找用法
Command + Shift + F7 在文件中突出显示的用法
Command + Option + F7 显示用法

Part 4:Compile and Run(编译和运行)

快捷键 作用
Command + F9 编译 Project
Command + Shift + F9 编译选择的文件、包或模块
Control + Option + R 弹出 Run 的可选择菜单
Control + Option + D 弹出 Debug 的可选择菜单
Control + R 运行
Control + D 调试
Control + Shift + RControl + Shift + D 从编辑器运行上下文环境配置

Part 5:Debugging(调试)

快捷键 作用
F8 进入下一步,如果当前行断点是一个方法,则不进入当前方法体内
F7 进入下一步,如果当前行断点是一个方法,则进入当前方法体内,如果该方法体还有方法,则不会进入该内嵌的方法中
Shift + F7 智能步入,断点所在行上有多个方法调用,会弹出进入哪个方法
Shift + F8 跳出
Option + F9 运行到光标处,如果光标前有其他断点会进入到该断点
Option + F8 计算表达式(可以更改变量值使其生效)
Command + Option + R 恢复程序运行,如果该断点下面代码还有断点则停在下一个断点上
Command + F8 切换断点(若光标当前行有断点则取消断点,没有则加上断点)
Command + Shift + F8 查看断点信息

Part 6:Navigation(导航)

快捷键 作用
Command + O 查找类文件
Command + Shift + O 查找所有类型文件、打开文件、打开目录,打开目录需要在输入的内容前面或后面加一个反斜杠/
Command + Option + O 前往指定的变量 / 方法
Control + 方向键左 / Control + 方向键右 左右切换打开的编辑 tab 页
F12 返回到前一个工具窗口
Esc 从工具窗口进入代码文件窗口
Shift + Esc 隐藏当前或最后一个活动的窗口,且光标进入代码文件窗口
Command + Shift + F4 关闭活动 run/messages/find/... tab
Command + L 在当前文件跳转到某一行的指定处
Command + E 显示最近打开的文件记录列表
Option + 方向键左 / Option + 方向键右 光标跳转到当前单词 / 中文句的左 / 右侧开头位置
Command + Option + 方向键左 / Command + Option + 方向键右 退回 / 前进到上一个操作的地方
Command + Shift + Delete 跳转到最后一个编辑的地方
Option + F1 显示当前文件选择目标弹出层,弹出层中有很多目标可以进行选择(如在代码编辑窗口可以选择显示该文件的 Finder)
Command + B / Command + 鼠标点击 进入光标所在的方法/变量的接口或是定义处
Command + Option + B 跳转到实现处,在某个调用的方法名上使用会跳到具体的实现处,可以跳过接口
Option + SpaceCommand + Y 快速打开光标所在方法、类的定义
Control + Shift + B 跳转到类型声明处
Command + U 前往当前光标所在方法的父类的方法 / 接口定义
Control + 方向键下 / Control + 方向键上 当前光标跳转到当前文件的前一个 / 后一个方法名位置
Command + ] / Command + [ 移动光标到当前所在代码的花括号开始 / 结束位置
Command + F12 弹出当前文件结构层,可以在弹出的层上直接输入进行筛选(可用于搜索类中的方法)
Control + H 显示当前类的层次结构
Command + Shift + H 显示方法层次结构
Control + Option + H 显示调用层次结构
F2 / Shift + F2 跳转到下一个 / 上一个突出错误或警告的位置
F4 / Command + 方向键下 编辑 / 查看代码源
Option + Home 显示到当前文件的导航条
F3 选中文件 / 文件夹 / 代码行,添加 / 取消书签
Option + F3 选中文件 / 文件夹/代码行,使用助记符添加 / 取消书签
Control + 0Control + 9 定位到对应数值的书签位置
Command + F3 显示所有书签

Part 7:Refactoring(重构)

快捷键 作用
F5 复制文件到指定目录
F6 移动文件到指定目录
Command + Delete 在文件上为安全删除文件,弹出确认框
Shift + F6 重命名文件
Command + F6 更改签名
Command + Option + N 一致性
Command + Option + M 将选中的代码提取为方法
Command + Option + V 提取变量
Command + Option + F 提取字段
Command + Option + C 提取常量
Command + Option + P 提取参数

Part 8:VCS / Local History(版本控制 / 本地历史记录)

快捷键 作用
Command + K 提交代码到版本控制器
Command + T 从版本控制器更新代码
Option + Shift + C 查看最近的变更记录
Control + C 快速弹出版本控制器操作面板

Part 9:Live Templates(动态代码模板)

快捷键 作用
Command + Option + J 弹出模板选择窗口,将选定的代码使用动态模板包住
Command + J 插入自定义动态代码模板

Part 10:General(通用)

快捷键 作用
Command + 1Command + 9 打开相应编号的工具窗口
Command + S 保存所有
Command + Option + Y 同步、刷新
Control + Command + F 切换全屏模式
Command + Shift + F12 切换最大化编辑器
Option + Shift + F 添加到收藏夹
Option + Shift + I 检查当前文件与当前的配置文件
Control + ` 快速切换当前的 scheme(切换主题、代码样式等)
Command + , 打开 IDEA 系统设置
Command + ; 打开项目结构对话框
Shift + Command + A 查找动作(可设置相关选项)
Control + Shift + Tab 编辑窗口标签和工具窗口之间切换(如果在切换的过程加按上 delete,则是关闭对应选中的窗口)

 

12347
 
Copyright © 2008-2021 lanxinbase.com Rights Reserved. | 粤ICP备14086738号-3 |