Project Icon

posting

终端中的功能丰富HTTP客户端

Posting是一款基于终端的HTTP客户端,提供类似Postman和Insomnia的功能。作为文本用户界面应用,它支持SSH远程使用和高效的键盘操作。请求以YAML格式存储,便于阅读和版本控制。Posting集成了跳转导航、环境变量、语法高亮等特性,还支持自定义主题和命令面板。该项目基于Textual框架开发,运行需要Python 3.11+。

Posting

一个强大的终端 HTTP 客户端。

Posting 是一个 HTTP 客户端,类似于 Postman 和 Insomnia。作为一个 TUI 应用程序,它可以通过 SSH 使用,并支持高效的键盘操作工作流。您的请求以简单的 YAML 文件形式本地存储,便于阅读和版本控制。

image

一些主要特性包括:"跳转模式"导航、带自动完成的环境/变量系统、由 tree-sitter 提供的语法高亮、Vim 按键、用户自定义主题、配置、"在 $EDITOR 中打开"以及用于快速访问功能的命令面板。

Posting 使用 Textual 构建。

安装

Posting 可以通过 pipx 安装:

pipx install posting

需要 Python 3.11 或更高版本。

更多安装方法(如 brew 等)将很快添加。

集合

请求直接以简单的 YAML 文件形式存储在文件系统中,后缀为 .posting.yaml - 易于阅读、理解和版本控制!

以下是它们的样子:

name: 创建用户
description: 向系统添加新用户。
method: POST
url: https://jsonplaceholder.typicode.com/users
body: 
  content: |-
    {
      "firstName": "John",
      "email": "john.doe@example.com"
    }
headers:
- name: Content-Type
  value: application/json
params:
- name: sendWelcomeEmail
  value: 'true'

要打开一个集合(包含请求的目录),使用 --collection 选项:

posting --collection path/to/collection

这将递归查找并在侧边栏显示请求。 如果不提供目录,Posting 将使用默认的集合目录。 你可以通过运行 posting locate collection 检查默认位置。

导航

Posting 可以使用鼠标或键盘进行导航。

跳转模式

跳转模式是最快的导航方式。

ctrl+o 进入跳转模式。

屏幕上会出现一个按键覆盖层,允许你通过按对应的键跳转到任何小部件。

url-bar-environments-short

标签导航

tabshift+tab 将在小部件之间移动焦点, 而 j/k/up/down 将在小部件内移动。

在合适的情况下,updown 也会在小部件之间移动。

上下文帮助

许多小部件除了页脚显示的绑定外,还有额外的绑定。你可以通过按 f1ctrl+?(或 ctrl+shift+/)查看当前聚焦小部件的完整按键绑定列表,以及额外的使用信息和提示。

image

退出

ctrl+c 退出 Posting。

环境

你可以在 UI 中使用 ${VARIABLE_NAME}$VARIABLE_NAME 语法使用变量。 这些变量将被替换到发出的请求中。

url-bar-environments-short

可以使用 --env 选项加载 .env 文件。 然后可以在 UI 中使用这些文件中的变量。

示例

假设你正在测试一个同时存在于 devprod 环境中的 API。

devprod 环境共享一些公共变量,但在许多方面也有所不同。 我们可以通过使用单个 shared.env 文件来模拟这种情况,该文件包含环境之间共享的变量,然后使用 dev.envprod.env 文件包含特定环境的变量。

# 文件:shared.env
API_PATH="/api/v1"
ENV_NAME="shared"

# 文件:dev.env
API_KEY="dev-api-key"
ENV_NAME="dev"
BASE_URL="https://${ENV_NAME}.example.com"

# 文件:prod.env
API_KEY="prod-api-key"
ENV_NAME="prod"
BASE_URL="https://${ENV_NAME}.example.com"

dev 环境中工作时,你可以使用 --env 选项加载所有共享变量和所有开发环境特定变量:

posting --env shared.env --env dev.env

这将加载 shared.env 中的所有共享变量,然后加载 dev.env 中的变量。由于 ENV_NAME 在两个文件中都出现,将使用最后指定的 dev.env 文件中的值。

请注意,你不需要重启来加载对这些文件的更改, 所以你可以在 Posting 旁边用你选择的编辑器打开和编辑你的 env 文件。 但是,自动完成和变量高亮直到 Posting 重启后才会更新。

如果你想允许使用主机上存在的环境变量(即那些未在任何 .env 文件中定义的变量),你必须将 use_host_environment 配置选项设置为 true(或设置环境变量 POSTING_USE_HOST_ENVIRONMENT=true)。

环境特定配置

由于所有 Posting 配置选项也可以指定为环境变量,我们也可以将环境特定配置放在 .env 文件中。本文档中有专门的"配置"部分更详细地介绍了这一点。

例如,如果你想在生产环境中使用浅色主题(作为一个微妙的提醒你在生产环境中!),你可以在 prod.env 文件中设置环境变量 POSTING_THEME=solarized-light

请注意,配置文件优先于环境变量,所以如果你在 .env 文件和 config.yaml 中都设置了一个值,将使用 config.yaml 文件中的值。

命令面板

Posting 中的一些功能不需要专门的键盘快捷键(例如,切换到特定主题),而可以通过命令面板访问。

要打开命令面板,按 ctrl+p

command-palette-demo

配置

Posting 可以使用配置文件、环境变量和/或 .env 文件进行配置。

配置值按以下优先顺序加载(从高到低):

  1. 配置文件
  2. 环境变量
  3. .env 文件

可用配置的范围将在未来大大扩展。

配置文件

你可以使用 YAML 为 Posting 编写配置。

可以使用命令 posting locate config 检查配置文件的位置。

以下是一个示例配置文件:

theme: galaxy
layout: horizontal
response:
  prettify_json: false
heading:
  visible: true
  show_host: false

环境变量

所有配置值也可以设置为环境变量。

只需在配置名称前加上 POSTING_ 前缀,并将其设置为环境变量。

对于嵌套的配置值,使用 __ 作为分隔符。因此,要将 heading.visible 设置为 false,你可以设置环境变量 POSTING_HEADING__VISIBLE=false

例如,要将主题设置为 galaxy,你可以设置环境变量 POSTING_THEME=galaxy

dotenv(.env)文件

Posting 还支持 .env(dotenv)文件,如果你想根据工作环境(例如,"dev" 与 "prod")切换环境变量值,这些文件很有用。

你可以使用 --env 选项告诉 Posting 使用 .env 文件。 这个选项可以多次提供以加载多个 .env 文件。

以下是一个示例 .env 文件:

POSTING_THEME="cobalt"
POSTING_LAYOUT="vertical"
POSTING_HEADING__VISIBLE="false"

Dotenv 文件与集合是分开的,尽管你可能希望将它们包含在集合中,以便于版本控制和与他人共享。

可用配置选项

配置键 (环境变量)值 (默认值)描述
theme (POSTING_THEME)"posting", "galaxy", "monokai", "solarized-light", "nautilus", "nebula", "alpine", "cobalt", "twilight", "hacker" (默认: "posting")设置应用程序的主题。
load_user_themes (POSTING_LOAD_USER_THEMES)true, false (默认: true)如果启用,从主题目录加载用户主题,允许在配置中指定并通过命令面板选择。
load_builtin_themes (POSTING_LOAD_BUILTIN_THEMES)true, false (默认: true)如果启用,加载内置主题,允许在配置中指定并通过命令面板选择。
theme_directory (POSTING_THEME_DIRECTORY)(默认: ${XDG_DATA_HOME}/posting/themes)包含用户主题的目录。
layout (POSTING_LAYOUT)"vertical", "horizontal" (默认: "horizontal")设置应用程序的布局。
use_host_environment (POSTING_USE_HOST_ENVIRONMENT)true, false (默认: false)允许/拒绝在请求中使用主机环境变量,通过 $env: 语法。禁用时,只有在 .env 文件中明确定义的变量才可用。
animation (POSTING_ANIMATION)"none", "basic", "full" (默认: "none")控制动画级别。
response.prettify_json (POSTING_RESPONSE__PRETTIFY_JSON)true, false (默认: true)如果启用,JSON 响应将被美化格式化。
response.show_size_and_time (POSTING_RESPONSE__SHOW_SIZE_AND_TIME)true, false (默认: true)如果启用,响应区域边框副标题将显示响应的大小和所用时间。
heading.visible (POSTING_HEADING__VISIBLE)true, false (默认: true)显示/隐藏应用程序标题。
heading.show_host (POSTING_HEADING__SHOW_HOST)true, false (默认: true)在应用程序标题中显示/隐藏主机名。
heading.show_version (POSTING_HEADING__SHOW_VERSION)true, false (默认: true)在应用程序标题中显示/隐藏版本。
url_bar.show_value_preview (POSTING_URL_BAR__SHOW_VALUE_PREVIEW)true, false (默认: true)在 URL 栏下方显示/隐藏变量值预览。
pager (POSTING_PAGER)(默认: $PAGER)用于分页文本的命令。
pager_json (POSTING_PAGER_JSON)(默认: $PAGER)用于分页 JSON 的命令。
editor (POSTING_EDITOR)(默认: $EDITOR)用于在外部编辑器中打开文件的命令。
ssl.ca_bundle (POSTING_SSL__CA_BUNDLE)绝对路径 (默认: 未设置)CA 束文件/目录的绝对路径。如果未设置,将使用 Certifi CA 束。
ssl.verify (POSTING_SSL__VERIFY)true, false (默认: true)验证服务器身份。
ssl.certificate_path (POSTING_SSL__CERTIFICATE_PATH)绝对路径 (默认: 未设置)客户端 SSL 证书文件或目录的绝对路径。
ssl.key_file (POSTING_SSL__KEY_FILE)绝对路径 (默认: 未设置)客户端 SSL 密钥文件的绝对路径。
ssl.password (POSTING_SSL__PASSWORD)密钥文件的密码。(默认: 未设置)如果密钥文件已加密,用于解密的密码。
focus.on_startup (POSTING_FOCUS__ON_STARTUP)"url", "method", "collection" (默认: "url")应用程序启动时自动聚焦 URL 栏、方法或集合浏览器。
focus.on_response (POSTING_FOCUS__ON_RESPONSE)"body", "tabs" (默认: 未设置)收到响应时自动聚焦响应选项卡或响应正文文本区域。
text_input.blinking_cursor (POSTING_TEXT_INPUT__BLINKING_CURSOR)true, false (默认: true)如果启用,输入小部件和文本区域小部件中的光标将闪烁。
command_palette.theme_preview (POSTING_COMMAND_PALETTE__THEME_PREVIEW)true, false (默认: false)如果启用,当光标悬停在主题上时,命令面板将显示所选主题的预览。这会降低光标移动速度,因此默认禁用。
use_xresources (POSTING_USE_XRESOURCES)true, false (默认: false)尝试创建名为 xresources-darkxresources-light 的主题(参见下面的章节)

SSL 证书配置

Posting 可以从 .pem 文件加载自定义 CA 束。

最简单的方法是在您的 config.yaml 文件中:

ssl:
  ca_bundle: 'absolute/path/to/certificate.pem'

环境特定的证书

如果每个环境所需的 CA 束不同,您可以再次使用所有配置都可以设置为环境变量的原则,这些环境变量可以选择使用 --env.env 文件设置和加载:

# dev.env
POSTING_SSL__CA_BUNDLE='/path/to/certificate.pem'

现在在 dev 环境中工作时加载 dev.env 文件,以确保使用 dev 环境的 CA 束:

posting --env dev.env

客户端证书

您可以指定本地证书作为客户端证书:

ssl:
  certificate_path: /path/to/certificate.pem
  key_file: /path/to/key.key  # 可选
  password: '***********'  # key_file 的可选密码

主题设置

将自定义主题放在主题目录中,Posting 将在启动时加载它们。主题文件必须以 .yaml 为后缀,但文件名的其余部分 Posting 不使用。

您可以通过在终端中运行 posting locate themes 来查看 Posting 将在哪里查找主题。

以下是一个示例主题文件:

name: example  # 在配置文件中使用此名称
primary: '#4e78c4'  # 按钮,固定表格列
secondary: '#f39c12'  # 方法选择器,一些次要标签
accent: '#e74c3c'  # 标题文本,滚动条,光标,焦点高亮
background: '#0e1726' # 背景颜色
surface: '#17202a'  # 面板等
error: '#e74c3c'  # 错误消息
success: '#2ecc71'  # 成功消息
warning: '#f1c40f'  # 警告消息
syntax: 'dracula'  # 自动切换语法高亮主题

# 可选元数据
author: Darren Burns
description: 一个带有蓝色主色调的深色主题。
homepage: https://github.com/darrenburns/posting

语法高亮

诸如 URL 栏、文本区域和包含变量的字段等语法高亮元素将根据主题中定义的语义颜色(primarysecondary 等)进行着色。

如果您想对语法高亮有更多控制,可以在主题文件中指定自定义语法高亮主题。 下面的示例说明了在自定义语法高亮方面可用的一些选项。

text_area:
  cursor: 'reverse'  # 设置块光标的样式
  cursor_line: 'underline'  # 设置光标所在行的样式
  selection: 'reverse'  # 设置所选文本的样式
  gutter: 'bold #50e3c2'  # 设置装订线的样式
  matched_bracket: 'black on green'  # 设置匹配括号的样式
url:
  base: 'italic #50e3c2'  # 设置 URL 'base' 的样式
  protocol: 'bold #b8e986'  # 设置协议的样式
syntax:
  json_key: 'italic #4a90e2'  # 设置 JSON 键的样式
  json_number: '#50e3c2'  # 设置 JSON 数字的样式
  json_string: '#b8e986'  # 设置 JSON 字符串的样式
  json_boolean: '#b8e986'  # 设置 JSON 布尔值的样式
  json_null: 'underline #b8e986'  # 设置 JSON null 值的样式

X resources 主题

Posting 支持使用 X resources 进行主题设置。要使用此功能,请启用 use_xresources 选项(见上文)。

它需要 PATH 中有 xrdb 可执行文件,且 xrdb -query 必须返回以下变量:

Xresources描述
*color0主要颜色:用于按钮背景和固定表格列
*color8次要颜色:用于方法选择器和一些次要标签
*color1错误颜色:用于错误消息
*color2成功颜色:用于成功消息
*color3警告颜色:用于警告消息
*color4强调颜色:用于标题文本、滚动条、光标、焦点高亮
*background背景颜色
*color7表面/面板颜色

如果满足这些条件,将可以使用名为 xresources-darkxresources-light 的主题。

导入 OpenAPI 规范

注意:此功能仍处于高度实验阶段。

Posting 可以将 OpenAPI 3.x 规范转换为集合。

要导入 OpenAPI 规范,请使用 posting import path/to/openapi.yaml 命令。

您可以选择提供一个输出目录。

如果未提供输出目录,将使用默认的集合目录。

Posting 将尝试在集合中构建一个与导入的 API 的 URL 结构相一致的文件结构。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号