跳到主要内容

HTTP服务器

在本机对某个文件夹开一个临时网页服务,给手机或其它设备浏览、下载、上传。证书过期时请先升级 Quicker。

当前模块定义

sys:httpserver网络服务Action
标准模块
输入 13 · 输出 5 · 枚举 1

输入参数

  • 操作类型operationEnum必填
    填写 固定输入默认 CreateFileServer
    创建文件服务器默认CreateFileServer
    关闭服务CloseServer
    获取服务状态GetServerState
  • 端口号portInteger可选

    服务端口号。值为0时自动生成端口号。

    填写 输入或变量条件 仅:CreateFileServer默认 8080
  • 启用HTTPSenableHttpsBoolean可选
    填写 输入或变量条件 仅:CreateFileServer默认 true
  • 文件夹路径docPathText可选

    服务的文件夹完整路径。不支持磁盘根目录。

    填写 输入或变量条件 仅:CreateFileServer
  • 默认文档defaultDocText可选

    可选,如index.html。

    填写 输入或变量条件 仅:CreateFileServer
  • 基础验证密码passwordText可选

    Basic验证的密码,账号固定为quicker

    填写 输入或变量条件 仅:CreateFileServer
  • 服务IDserviceIdText可选

    通过服务ID启动或关闭服务。同一服务ID再次创建时会先关闭旧服务。

    填写 输入或变量默认 default
  • 自定义请求处理customRequestText可选

    每行一条规则,格式为:"路径:HTTP方法:子程序名"。详细信息请参考模块文档。

    填写 输入或变量条件 仅:CreateFileServer
  • HEAD插入代码headCodeText可选

    向目录HTML文档的Head中插入代码,可用于自定义风格。

    填写 输入或变量条件 仅:CreateFileServer
  • BODY插入代码bodyCodeText可选

    向目录HTML文档的BODY中插入代码,可用于自定义脚本。

    填写 输入或变量条件 仅:CreateFileServer
  • 闲置自动关闭autoShutdownSecondsNumber可选

    可选。一定时间(秒)没有请求后自动关闭服务。

    填写 输入或变量条件 仅:CreateFileServer默认 0
  • 自动关闭时显示通知showNotifyWhenAutoCloseBoolean可选

    闲置超时关闭时,是否显示通知。

    填写 输入或变量条件 仅:CreateFileServer默认 false
  • 失败后停止stopIfFailBoolean可选

    失败后是否停止动作

    填写 固定输入默认 true

输出参数

  • 是否成功isSuccessBoolean

    操作是否成功

  • 服务地址serverUrlText

    服务网址

    条件 仅:CreateFileServer
  • 带账号的地址serverUrlWithAccountText

    带有账号密码的地址。可用于扫码后自动登录。

    条件 仅:CreateFileServer
  • 是否在运行isRunningBoolean

    指定ID的web服务是否在运行中

    条件 仅:GetServerState
  • 运行中的服务列表serverListList

    所有运行中的服务的列表

    条件 仅:GetServerState

概述

常见用途:临时传文件、用手机看视频、启动后让手机端自动化来传文件。

HTTP服务器

创建临时的本地HTTP服务器,从而可以从移动端或其它设备访问。
操作类型
端口号
8080
服务端口号。值为0时自动生成端口号。
文件夹路径
 
服务的文件夹完整路径。不支持磁盘根目录。
默认文档
 
可选,如index.html。
基础验证密码
 
Basic验证的密码,账号固定为quicker
服务ID
default
通过服务ID启动或关闭服务。同一服务ID再次创建时会先关闭旧服务。
自定义请求处理
 
每行一条规则,格式为:"路径:HTTP方法:子程序名"。详细信息请参考模块文档。
HEAD插入代码
 
向目录HTML文档的Head中插入代码,可用于自定义风格。
BODY插入代码
 
向目录HTML文档的BODY中插入代码,可用于自定义脚本。
闲置自动关闭
0
可选。一定时间(秒)没有请求后自动关闭服务。
是否成功
-- 选择变量 --
操作是否成功
服务地址
-- 选择变量 --
服务网址
带账号的地址
-- 选择变量 --
带有账号密码的地址。可用于扫码后自动登录。

参数说明

操作类型:创建文件服务器、关闭服务、获取服务状态。

创建文件服务器

端口号:1~65535,不能已被占用。0 表示自动找空闲端口。Windows 防火墙要把 Quicker 加入白名单,或放行该端口入站。

启用HTTPS:默认开启。开启后用 https://转换后的本机局域网ip.lan.quicker.cc:端口 访问:把 IP 里的 . 换成 -。例如本机 192.168.1.56、端口 8080https://192-168-1-56.lan.quicker.cc:8080。这只是 IP 别名,别人不能凭这个域名进你的局域网。关掉则用 http://本机局域网IP:端口

文件夹路径:网站根目录。打开网址会列出其中的文件和文件夹。不支持磁盘根目录。留空时(纯自定义请求)会在 Windows 临时目录建一个空目录。

默认文档:例如 index.html。目录下有这个文件时直接打开,而不是列目录。

基础验证密码:Basic Authentication 的密码,账号固定为 quicker。和别人共享网络时建议开。

服务ID:后续更新、关闭时用。再次用同一 ID 创建会先关掉旧服务。默认 default

闲置自动关闭:若干秒没有新请求就关。0 表示不自动关。

自动关闭时显示通知:闲置超时关闭时是否弹通知。默认关闭。旧稿未写。

自定义请求处理:用子程序处理请求,格式见下文。

HEAD插入代码 / BODY插入代码:生成目录页时,分别替换 <!--HEAD-CODE--><!--BODY-CODE-->,可用来加 CSS / JS。

失败后停止:失败是否中止动作。默认开启。

输出:

  • 服务地址
  • 带账号的地址:开了密码时为 https://quicker:密码@网址:端口。可做成二维码给手机扫。部分浏览器不支持这种 URL(iOS Safari 不支持,微信和 Chrome 支持;360 浏览器也不支持)。

关闭服务

关掉指定 服务ID

HTTP服务器

创建临时的本地HTTP服务器,从而可以从移动端或其它设备访问。
操作类型
服务ID
default
通过服务ID启动或关闭服务。同一服务ID再次创建时会先关闭旧服务。

常见用法:开服务后显示等待窗口,关掉窗口再关服务;或加一条右键菜单来关。

获取服务状态

看某个服务是否在跑,或列出全部运行中的服务。

HTTP服务器

创建临时的本地HTTP服务器,从而可以从移动端或其它设备访问。
操作类型
服务ID
default
通过服务ID启动或关闭服务。同一服务ID再次创建时会先关闭旧服务。
是否成功
-- 选择变量 --
操作是否成功
是否在运行
-- 选择变量 --
指定ID的web服务是否在运行中
运行中的服务列表
-- 选择变量 --
所有运行中的服务的列表
  • 是否在运行:指定 ID 是否在跑。
  • 运行中的服务列表

文件服务网页

  1. 当前路径的上级
  2. 返回上级目录
  3. 当前文件夹名
  4. 缩略图。图片、视频可点进浏览模式。

  1. 文件名。点击按浏览器默认方式打开或下载。
  2. 文件大小。点击当附件下载。
  3. 勾选文件或文件夹,打包下载。选中后会出现「全选」「下载」。
  4. 上传到当前文件夹。

  1. 全选当前目录。
  2. 打包下载所选内容(只打成 zip,不压缩)。

程序调用上传文件

程序、脚本不必改 自定义请求处理,可直接调:

POST /__api/upload
Content-Type: multipart/form-data

查询参数 path 指定根目录内的目标文件夹。省略则传到根目录;path=/uploads/ 会传到 uploads,不存在就创建。

D:\Temp\demo.txt 传到 uploads

curl.exe -F "file=@D:\Temp\demo.txt" "http://127.0.0.1:8080/__api/upload?path=/uploads/"

成功返回 200 OK 和 JSON,不会跳到目录页:

{
"success": true,
"files": [
{
"fieldName": "file",
"name": "demo.txt",
"path": "/uploads/demo.txt",
"url": "/uploads/demo.txt",
"size": 1234,
"contentType": "text/plain"
}
]
}
  • path 是服务内的公开路径,不含电脑上的真实目录。
  • url 经过网址转义,可继续 GET。
  • 一次可传多个文件;若最终重名,请求会被拒绝并恢复上传前的文件,避免静默覆盖。
  • path 不能指到根目录之外,也不能经过目录符号链接、junction 或其它重解析点。
  • 必须是标准 multipart/form-data;普通文本、JSON 或伪造的相似类型返回 415
  • 非法路径、无文件等返回 400;落盘失败返回 500。错误正文为 application/problem+json
  • 沿用当前服务的 HTTPS、密码、监听范围和闲置关闭,不会另开服务或绕过密码。
  • 自定义请求处理 优先。规则若匹配 POST /__api/upload,仍交给对应子程序。

浏览器目录页原来的上传方式不变,成功后仍回目录页;程序要结构化结果时再用这个接口。

上传失败排查

标准 multipart 支持中文文件名。某个客户端传中文文件返回 500 时,更可能是它生成的 Content-Disposition 不标准,而不是 Windows 不支持中文路径。

请保留原始 multipart 请求,并查看:

  1. HTTP 500 的完整响应正文;
  2. Quicker 日志里的 HTTP 文件上传失败

日志会记 Content-TypeContent-LengthUser-Agent 和失败分段的 Content-Disposition,不会记文件正文、Cookie 或认证信息。文件名可能含隐私,这些诊断只写本机日志。

自定义请求处理

需要时用子程序自己处理 HTTP 请求。

  1. 写路由:哪些请求交给哪个子程序。
  2. 按模板定义子程序的输入输出。

路由规则

自定义请求处理 里写:

  • 每行一条,从上往下匹配,命中后不再看后面。
  • 格式:路径:HTTP方法列表:子程序名
  • 路径:URI 的 AbsolutePath,可写完整路径或正则。/api 匹配 http://192.168.1.20:8080/api\S+ 匹配全部。
  • 方法:GETPOSTPUTDELETEHEAD,或 * 表示全部。例如 GETGET,POST*
  • 子程序须按规定定义输入输出。可导入 模板子程序

下面这条表示任意路径的 GET/POST 都交给「http请求处理」:

HTTP服务器

创建临时的本地HTTP服务器,从而可以从移动端或其它设备访问。
自定义请求处理
\S+:get,post:http请求处理
每行一条规则,格式为:"路径:HTTP方法:子程序名"。详细信息请参考模块文档。
示例:自定义HTTP
HTTP服务器创建文件服务器
打开网址((系统默认浏览器)) {serverUrl}

实现处理子程序

  • 先导入模板再改。
  • 子程序会被直接执行,主程序步骤不会跑,也不必把子程序加进步骤列表。
  • 里面只处理数据并尽快返回,不要做界面交互。

输入

Path:网址的路径。例如 http://192.168.5.114:810/2022年文件/系统设计?action=copy 的路径是 /2022年文件/系统设计

QueryString:问号起的查询串,如 ?action=copy

QueryDict:查询串转成的词典。

Method:GET / POST / PUT / DELETE / HEAD。

FORMx-www-form-urlencodedmultipart/form-data 时解析出的表单词典。

BODYapplication/jsonx-www-form-urlencoded 时的完整请求体;其它类型为空。

Files:multipart 上传的文件会被存到服务目录,这里是完整路径列表。

表达式里还可以通过 _context.ExtraData.HttpRequestEventArgs 访问 请求上下文,直接读写响应。

输出

Processed:若已用上面的上下文对象自己写过响应,设为 true,Quicker 就不再处理输出。

StatusCode / ContentType / RespBody:返回的状态码、MIME 类型和正文。

限制与排障

  • HTTPS 证书过期:升级 Quicker。
  • 手机访问不到:检查防火墙、是否和电脑同一局域网、HTTPS 域名是否按 IP 转换。
  • 上传 500:先看日志里的 HTTP 文件上传失败,核对 multipart 是否标准。

相关链接

更新历史

  • 20240701 增加 HTTPS 证书过期说明。
  • 20260810 增加程序化上传 API 及失败排查。

更新于