
开发工具接口测试【免费下载链接】http-promptAn interactive command-line HTTP and API testing client built on top of HTTPie featuring autocomplete, syntax highlighting, and more. https://twitter.com/httpie项目地址https://gitcode.com/gh_mirrors/ht/http-prompt点击查看免费下载HTTP Prompt 是一个构建在 HTTPie 之上的交互式命令行 HTTP/API 测试客户端它把 HTTPie 的简洁参数语法搬进了一个带自动补全、语法高亮和会话持久化的交互式 Shell 中。本文基于官方用户指南docs/user-guide.rst并结合仓库源码展开读完你可以掌握从安装启动、四类请求参数语法、HTTPie 选项注入、命令预览到会话保存/加载、输出重定向、管道与 Shell 替换以及基于 OpenAPI/Swagger 规范的端点导航与自动补全这一整套实战能力。项目定位HTTP Prompt 由 HTTPie 与 prompt_toolkit 驱动HTTPie 负责真正的 HTTP 请求发送与输出格式化prompt_toolkit 负责交互式提示符、补全、历史记录与高亮。进入会话后你的每一次输入都会被解析为对当前上下文Context的修改或一次真实的 HTTP 请求最终由 HTTPie 的main()函数执行见 http_prompt/cli.py 与 http_prompt/execution.py 中的_call_httpie_main。安装与升级像安装普通 Python 包一样安装$ pip install http-prompt如果目标环境是系统级 Python 且遇到权限错误官方推荐两条路径# 方式一使用 sudo 装到系统目录不推荐 $ sudo pip install http-prompt # 方式二仅装入当前用户目录推荐 $ pip install --user http-prompt升级到最新版本$ pip install -U http-prompt在 macOS 上也可以使用 Homebrew$ brew install http-prompt仓库中提供了 setup.py、setup.cfg 与 requirements.txt安装时核心依赖为httpie、prompt_toolkit、parsimonious、pygments与click等。首次运行会执行配置初始化逻辑这在下面的配置一节有详细说明。快速上手启动会话与基础命令启动会话的三种方式# 不带参数恢复上次会话若从未运行过默认目标为 http://localhost:8000 $ http-prompt # 带 URL 启动 $ http-prompt http://httpbin.org # 带初始选项与请求参数启动 $ http-prompt localhost:8000/api --auth user:pass usernamesomebody几个值得注意的细节有源码可查URL 无需完整输入。在 http_prompt/cli.py#L33-L40 的fix_incomplete_url()中localhost:8000/api这类缺少协议的地址会被自动补全为http://localhost:8000/apis://、//开头也会被规范化。当不传任何参数sys.argv长度仅为 1启动时CLI 会尝试从用户数据目录加载上次保存的会话上下文见 http_prompt/cli.py#L139-L141这正是恢复上次会话的实现。命令行传入的http_options如--auth user:pass usernamesomebody会被execute()逐条执行、合并进当前上下文且可以覆盖--env会话文件中已有的同名值见 http_prompt/cli.py#L149-L152。用 cd 切换 URL# 相对路径在当前 URL 基础上拼接 cd api/v1 # 绝对 URL整体替换 cd http://localhost/apicd的实现位于 http_prompt/execution.py#L239-L249相对路径通过urljoin2()与当前 URL 拼接绝对 URL 则直接替换。urljoin2还做了去尾斜杠的细节处理http_prompt/execution.py#L147-L153避免拼接出多余的/。四类请求参数的语法HTTP Prompt 沿用了 HTTPie 的参数语法通过四种不同的赋值符号区分参数类型# Header冒号 Content-Type:application/json # Querystring 参数双等号 page2 # Body 参数单等号 usernamefoo full_namefoo bar # Body 参数以原生 JSON 形式提交v0.9.0 起冒号等号 number:1234 is_ok:true names:[foo,bar] user:{username: foo, password: bar} # 同一行内混写 Content-Type:application/json page2 usernamefoo从源码看这四种运算符正是命令文法中的mutop:/://见 http_prompt/execution.py#L68 与 http_prompt/execution.py#L373-L388 的_mutate()实现其映射关系为运算符归属数据结构说明key:valueheaders请求头keyvaluequerystring_params查询字符串参数同名可重复内部用列表存储支持a1 a2见代码注释 #20keyvaluebody_params表单/请求体参数key:valuebody_json_params原生 JSON 请求体参数值会经json.loads()解析后按 JSON 类型提交带空格的值需加引号如full_namefoo bar_mutate之前的文法层http_prompt/execution.py#L34-L118 的 parsimonious 文法支持单引号、双引号以及反斜杠转义。注入 HTTPie 选项除请求参数外会话中还支持直接写入 HTTPie 的命令行选项 --form --auth user:pass --verifyno # HTTPie 选项与请求参数混写在同一行 --form --auth user:pass usernamefoo Content-Type:application/json选项被存放在上下文的options字典中最终原样转交给 HTTPie。仓库的 http_prompt/options.py 给出了完整可补全的选项清单例如标志类Flag选项--json/-j、--form/-f、--verbose/-v、--headers/-h、--body/-b、--stream/-S、--download/-d、--continue/-c、--follow、--check-status、--ignore-stdin、--traceback、--debug等取值类Value选项--auth/-a、--auth-type可选值basic/digest、--verify可选值no/yes、--prettyall/colors/format/none、--style/-s、--print/-p、--output/-o、--proxy、--timeout、--cert、--cert-key、--session、--session-read-only、--raw等。这些选项在补全时还会给出可选值提示如输入--verify后提示no/yes交互体验接近真实 Shell。命令预览httpie 与 envhttpie预览即将执行的命令发送请求之前可以用httpie命令查看 HTTP Prompt 将会以什么命令调用 HTTPie httpie post http --auth user:pass --form POST http://localhost/api apikeyabc usernamejohnhttpie还支持临时覆盖附加在httpie之后的选项与参数只会作用于本次预览不会修改当前会话状态# 当前无任何参数 httpie http http://localhost # 临时附加路径与参数 httpie /api/something page2 --json http --json http://localhost/api/something page2 # 当前会话状态不受影响 httpie http http://localhost预览命令的生成逻辑在 http_prompt/context/transform.py#L93-L101 的format_to_httpie()依次输出选项--authuser:pass形式、方法名大写、URL 与请求参数并用smart_quote对含空格的值加引号。文法中还预留了curl工具名tool httpie / curl见 http_prompt/execution.py#L97不过当前format_to_curl尚未实现会抛出NotImplementedErrorhttp_prompt/context/transform.py#L83-L85因此实际可用的预览工具是httpie。env打印当前会话状态自 v0.6.0 起env命令可以把当前会话输出为一段可回放/可保存的 HTTP Prompt 命令序列 env --verifyno cd http://localhost page10 limit20输出格式由 http_prompt/context/transform.py#L104-L110 的format_to_http_prompt()生成先输出 HTTPie 选项再输出cd URL最后输出各请求参数。这个格式与保存/加载会话直接相关见下文。发送请求HTTP 方法与临时覆盖在提示符中输入 HTTP 方法名即可发送真实请求 get post put patch delete head options # v0.8.0 新增文法层面http_prompt/execution.py#L98-L99还额外支持connect对应 CONNECT 请求可在 http_prompt/completion.py#L29-L38 的ACTIONS表中查到。与httpie一样这些方法也支持临时覆盖——附加的参数与选项只作用于这一次请求# 当前无参数 httpie http http://localhost # 发送一次带覆盖参数的 POST post /api/v1 --form namejane # 当前会话状态保持不变 httpie http http://localhost请求的执行链路是execute()解析命令 →ExecutionVisitor生成临时上下文context_override并与当前上下文合并 →_call_httpie_main()将上下文转换为参数列表调用httpie_main()http_prompt/execution.py#L492-L510。这里有一个值得一提的实现细节HTTPie 本身不提供对外获取响应对象的 APIHTTP Prompt 借助sys.settrace()拦截 HTTPie 内部的get_response()来拿到响应用于后续的 Cookie 自动处理源码注释中自称 super dirty hack。会话管理输出重定向、保存与加载输出重定向v0.6.0任意命令的输出都可以重定向到文件支持覆盖写入与追加两种模式# 覆盖写入 COMMAND /path/to/file # 追加写入 COMMAND /path/to/file其中COMMAND可以是envhttpieHTTP 动作get、post、put、patch、delete、head、options重定向的底层实现是 http_prompt/execution.py#L296-L306以二进制写模式wb打开目标文件以追加模式ab打开并把输出对象从终端切换为文件写入器。注意文件路径会先经过os.path.expandvars()因此支持$HOME之类的环境变量。保存与加载会话保存/加载会话是输出重定向的典型用途尤其适合团队协作——把当前环境导出为文件分享给队友一键加载。保存将env的输出重定向到文件 env /path/to/file加载使用source或exec。二者的唯一区别是exec在加载前会先清空当前会话rm *source则是在当前会话基础上合并# 更新当前会话合并 source /path/to/file # 清空当前会话后再加载 exec /path/to/file两者的实现可对照 http_prompt/execution.py#L314-L328exec先执行execute(rm *, ...)清空上下文再逐行执行文件内容source则直接逐行执行。命令行直接加载v0.11.0--env选项允许在启动时直接加载会话文件配合 Shell 别名可以做到每个项目一条命令启动、配置即载入# 为 project1 定义别名 $ alias http_project1http-prompt --env /path/to/project1/env/file # 启动 project1 的开发环境 $ http_project1命令行中的额外参数仍会被使用并覆盖会话文件中已有的同名值# 加载会话但覆盖 URL 并追加一个查询参数 $ http-prompt --env /path/to/file localhost:8080 page2--env的解析与加载逻辑见 http_prompt/cli.py#L84-L85要求文件已存在与 http_prompt/cli.py#L143-L147文件逐行回放的底层是 http_prompt/contextio.py#L23-L31 的load_context()它把文件的每一行当作一条 HTTP Prompt 命令交给execute()。保存 HTTP 响应控制台适合查看小体积文本响应对于较大的文本或二进制数据把响应直接存为文件更合适# 先 cd 到资源地址再把响应写到文件 cd http://httpbin.org/image/png get pig.png # 或者一行搞定 get http://httpbin.org/image/png pig.png管道与 Shell 替换管道v0.7.0HTTP Prompt 支持简化的管道语法可以把命令输出交给 Shell 命令继续处理# 用 sed 把 localhost 替换为 127.0.0.1 httpie POST http://localhost | sed s/localhost/127.0.0.1/ http http://127.0.0.1 # 用 grep 只打印包含 User-Agent 的行 get http://httpbin.org/get | grep User-Agent User-Agent: HTTPie/0.9.6 # macOS 上可以用 pbcopy 把结果复制到剪贴板 httpie | pbcopy # 用 jq 解析 JSON 响应 get http://httpbin.org/get | jq .headers.User-Agent HTTPie/0.9.6注意当前版本不支持多重管道如cmd1 | cmd2 | cmd3用法上限定为单级管道。实现上visit_pipe通过Popen(cmd, shellTrue, stdinPIPE, stdoutPIPE)启动管道子进程并把命令输出接入其标准输入visit_immutation在结束时读取子进程的标准输出http_prompt/execution.py#L308-L316。Shell 替换v0.7.0把 Shell 命令放进一对反引号...中即可从 Shell 环境计算出一个值并赋给参数# 把 date 的输出赋给查询参数 datedate -u %Y-%m-%d %H:%M:%S httpie http http://localhost:8000 date2016-10-08 09:45:00 # 从文件读取密钥假设文件内容为 secret_api_key passwordcat ./apikey.txt httpie http http://localhost:8000 passwordsecret_api_key实现位于 http_prompt/execution.py#L534-L537 的visit_shell_subs()用Popen(cmd, shellTrue, stdoutPIPE)执行反引号内的命令读取其标准输出并去掉末尾换行后作为参数值。这个语法在文法中shell_subs被允许出现在 unquoted/dquoted/squoted 三种字符串位置因此...也可用于 key 或嵌入带引号的参数中。配置config.py 详解自 v0.4.0 起HTTP Prompt 首次启动时会自动创建用户配置文件Linux/macOS$XDG_CONFIG_HOME/http-prompt/config.py默认即~/.config/http-prompt/config.pyWindows%LOCALAPPDATA%/http-prompt/config.py默认即~/AppData/Local/http-prompt/config.pyconfig.py是一个 Python 模块内含全部可定制选项直接用文本编辑器打开、按文件内的注释修改即可无需 Python 基础。初始化逻辑见 http_prompt/config.py#L15-L29若目标文件不存在就把打包的默认配置 http_prompt/defaultconfig.py 复制过去。加载时则先读默认配置、再用用户配置覆盖http_prompt/config.py#L64-L68。仓库的默认配置http_prompt/defaultconfig.py共 5 个选项语义如下选项默认值含义与可选值command_stylesolarized命令提示符的高亮主题。可选值algol、algol_nu、autumn、borland、bw、colorful、default、emacs、friendly、fruity、igor、lovelace、manni、monokai、murphy、native、paraiso-dark、paraiso-light、pastie、perldoc、rrt、solarized、tango、trac、vim、vs、xcodeoutput_styleNoneHTTPie 输出高亮风格可选值同command_style设为None则使用 HTTPie 默认风格。该值会被写入会话选项--style见 http_prompt/cli.py#L123-L125pagerless输出分页工具可选less或more。注意more不支持 ANSI 彩色。CLI 启动时会据此设置PAGER环境变量http_prompt/cli.py#L100-L101set_cookiesauto响应带Set-Cookie头时的处理策略auto自动静默设置ask询问用户是否设置off忽略viFalse编辑键位模式True启用 Vi 风格键位False使用 Emacs 风格键位传入 prompt_toolkit 的vi_mode见 http_prompt/cli.py#L159其中set_cookies的具体行为由 http_prompt/cli.py#L59-L71 的ExecutionListener.response_returned()实现当 HTTPie 返回的响应带 Cookie 时按配置决定是否把 Cookie 合并进当前会话的请求头auto/ask两种模式设置后会在终端提示Cookies set: ...。持久化上下文context.hp 与隐私保护HTTP Prompt 用一个名为context的数据结构表示当前会话。从 http_prompt/context/init.py#L4-L13 可以看到它由六部分组成url、headers、querystring_params、body_params、body_json_params、options外加退出标志should_exit和用于 OpenAPI 端点树的root。每当你输入一条修改上下文的命令HTTP Prompt 就会把上下文序列化保存到文件系统从而在重启http-prompt时无缝恢复上次会话。会话文件位置$XDG_DATA_HOME/http-prompt/context.hp默认~/.local/share/http-prompt/context.hpWindows 上为%LOCALAPPDATA%/http-prompt/context.hp默认~/AppData/Local/http-prompt/context.hp路径解析遵循 XDG Base Directory 规范http_prompt/xdg.py目录不存在时以0o700权限自动创建。隐私提醒上下文数据可能包含 API Key 等敏感信息因此应保持用户数据目录私有。默认情况下HTTP Prompt 将$XDG_DATA_HOME/http-prompt目录权限设为rwx------即700只有属主你本人可以读取。持久化实现细节http_prompt/contextio.py文件名常量CONTEXT_FILENAME context.hphttp_prompt/contextio.py#L15保存时调用format_to_http_prompt()把上下文序列化为 HTTP Prompt 命令序列其中--style选项被排除EXCLUDED_OPTIONS [--style]http_prompt/contextio.py#L12目的是避免与用户配置文件中的output_style产生冲突加载时逐行execute()回放http_prompt/contextio.py#L23-L31。旧版本用户须知0.6.0 之前HTTP Prompt 会按主机名和端口分组保存多个上下文自 0.6.0 起只保存最近一次上下文。行为改变的原因是多上下文分组功能完全可以被env、exec、source三个命令的组合取代因而被精简掉了。基于 OpenAPI/Swagger 的端点导航与自动补全自 v0.10.0 起HTTP Prompt 支持读取 OpenAPI原名 Swagger规范文件为 API 端点路径与参数提供自动补全并新增了ls命令用于浏览 API 结构。通过 --spec 加载规范--spec选项既支持本地文件也支持网络上的 JSON 规范# 本地规范文件 $ http-prompt http://localhost:8000 --spec /path/to/spec.json # 网络上的规范如各类公开 API 规范聚合站点 $ http-prompt https://api.github.com --spec https://api.apis.guru/v2/specs/github.com/v3/swagger.json加载逻辑见 http_prompt/cli.py#L73-L78 与 http_prompt/cli.py#L103-L117本地路径会被转换为file:URL 并读取远程 URL 直接下载内容优先按 JSON 解析JSON 解析失败时会尝试按 YAML 解析yaml.safe_load两者都失败则打印红色警告并忽略该规范。如果启动时未显式给出 URLHTTP Prompt 还能从规范本身推导默认地址取schemes的第一项缺省为https作为协议拼上host缺省为http://localhost:8000与basePath见 http_prompt/context/init.py#L17-L23。用 ls 与 cd 浏览 API 端点加载规范后ls与cd可以像浏览文件系统一样浏览 API 端点配合自动补全使用 ls users/ orgs/ cd users ls {username}/ cd {username} ls events/ orgs/底层实现是把规范中的所有路径构建成一颗树Context.__init__遍历spec[paths]把每个路径如/users/{username}/events拆分为路径段users、{username}、events逐层挂到根节点self.root上http_prompt/context/init.py#L25-L36路径参数in: path以外的参数也会作为叶子节点加入树中http_prompt/context/init.py#L46-L72。树节点定义在 http_prompt/tree.pyadd_path()建树、ls()遍历子树find_child()还支持通配符匹配——当输入与字面名不匹配时会尝试匹配{...}形式的路径参数节点http_prompt/tree.py#L47-L58这正是上面cd {username}得以工作的原因。visit_ls在终端输出时会对目录类节点着色http_prompt/execution.py#L338-L353。自动补全机制HTTP Prompt 的补全基于 prompt_toolkit 的Completer接口http_prompt/completer.py核心是一组按当前输入匹配的正则规则RULES例如输入形如xxx:时补全常见 Header 值如Content-Type:后提示application/json等来自 http_prompt/completion.py#L100-L111 的CONTENT_TYPES与HEADER_VALUES输入get、post等方法名加空格后补全已存在的 body/querystring 参数、Header 名与 HTTPie 选项输入ls、cd时从 OpenAPI 构建的树中补全端点路径仅目录节点见 http_prompt/completer.py#L127-L139输入rm -b/-h/-q/-o时分别补全当前已有的对应类型参数名其他情况补全根命令cd、env、exec、exit、help、httpie、rm ...、source等见 http_prompt/completion.py#L8-L27。补全匹配采用模糊匹配算法fuzzyfinderhttp_prompt/completer.py#L48-L60输入的部分字符即可命中候选每个候选项还会附带说明文字如GET request、Change URL/path、(当前值)已设置的参数会在补全描述中显示其当前值。其他交互能力与补全配套的还有语法高亮基于 http_prompt/lexer.py 的HttpPromptLexerPygments方法、选项、参数等使用不同颜色历史记录与自动建议会话历史保存在数据目录的history文件中http_prompt/cli.py#L128并启用AutoSuggestFromHistory()自动建议http_prompt/cli.py#L158help命令打印全部命令、选项、动作与 Header 的说明清单http_prompt/execution.py#L156-L170clear命令清屏。退出与错误处理输入exit结束会话http_prompt/execution.py#L360-L362 中设置should_exit标志。在提示符下按 Ctrl-C 可中断当前输入并留在会话中按 Ctrl-D 直接退出http_prompt/cli.py#L160-L163。当输入无法被文法解析时execute()会以红色提示Syntax error near 片段http_prompt/execution.py#L550-L556删除不存在的 key 会提示Key 名称 not found。结语与深入学习路径至此你已经掌握了 HTTP Prompt 的核心使用链路安装启动 → 用四种运算符构造请求 → 注入 HTTPie 选项 → 预览与实际发送 → 通过重定向、env/source/exec/--env管理会话 → 借助管道与 Shell 替换做输出加工 → 用config.py定制行为 → 依靠context.hp实现会话持久化 → 最后用--spec把 OpenAPI 规范变成可导航、可补全的 API 目录。如果想进一步深入实现细节推荐按以下路径阅读当前仓库源码交互入口与启动流程http_prompt/cli.py命令文法与执行引擎http_prompt/execution.py会话上下文数据结构与 OpenAPI 解析http_prompt/context/init.py上下文序列化/反序列化http_prompt/contextio.py上下文到 HTTPie 命令的转换http_prompt/context/transform.py配置读写与默认配置http_prompt/config.py、http_prompt/defaultconfig.pyXDG 路径解析http_prompt/xdg.py自动补全规则与候选生成http_prompt/completer.py、http_prompt/completion.pyHTTPie 选项元数据http_prompt/options.pyOpenAPI 端点树http_prompt/tree.py对应测试用例tests/test_execution.py、tests/test_contextio.py、tests/test_completer.py、tests/test_lexer.py这些测试文件覆盖了命令解析、上下文持久化、补全与配置加载等关键行为是理解各功能边界的最佳补充材料。赞分享开发工具接口测试【免费下载链接】http-promptAn interactive command-line HTTP and API testing client built on top of HTTPie featuring autocomplete, syntax highlighting, and more. https://twitter.com/httpie项目地址https://gitcode.com/gh_mirrors/ht/http-prompt点击查看免费下载相关推荐OpenClaw Matrix 通道富消息规范com.openclaw.presentation 元数据的设计与实现OpenClaw Matrix 通道富消息规范com.openclaw.presentation 元数据的设计与实现 OpenClaw 在向 Matrix 房开发工具接口测试从0到1跑通RPCS3中文汉化新手完整教程从0到1跑通RPCS3中文汉化新手完整教程 RPCS3 是一款高口碑的 PS3 模拟器本文是一份从 0 到 1 的 RPCS3汉化教程带你完成完整的 RP虚拟化图形学调试器探索http-prompt强大的交互式HTTP命令行客户端探索http prompt强大的交互式HTTP命令行客户端 http prompt是一个基于HTTPie和prompt_toolkit构建的交互式命令行HTT开发工具接口测试上一篇【亲测免费】 推荐开源项目ATTCK® Navigator - 精准的攻击面管理工具下一篇如何快速掌握Fakery终极Swift假数据生成器使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考