跳到主要内容

HTTP服务器

创建临时的本地HTTP服务器,从而可以从移动端或其它设备访问。

当前模块定义

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服务器(Web服务器),供文件浏览和传输。

参考动作:https://getquicker.net/Sharedaction?code=7a49ca6b-d243-4478-1e87-08d9f1ba2358

使用场景:

  • 临时的文件传输;
  • 用手机观看视频;
  • 自动化:启动服务后在手机端使用自动化工具传输文件;

注:如果遇到https证书过期的情况,请更新Quicker版本解决。

操作类型

创建文件服务器

对指定的目录开启一个网页服务器,可用于浏览或下载目录中的内容或向目录中上传文件。

HTTP服务器

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

【端口号】网页服务的端口号。

  • 端口的可用范围为1-65535。
  • 不能使用被占用的端口。
  • 设置为0时,Quicker会自动找到一个可用端口。
  • Windows防火墙需要将quicker假如白名单或开放此端口的入连接。

【启用HTTPS】是否开启https访问。

  • 开启时,将使用https://转换后的本机局域网ip地址.lan.quicker.cc:端口号格式的域名访问。其中“转换后的ip地址”为本机局域网IP地址将点.替换为-得到的值。如本机ip为192.168.1.56,端口为8080,那么开启https时,访问地址为:https://192-168-1-56.lan.quicker.cc:8080。注意此域名仅仅是ip地址的别名,就像不同的局域网会有相同的192.168.*.*的内网地址,您并不能通过这个域名访问到别人局域网里的ip,别人也不能通过这个域名访问到您的电脑。
  • 关闭时,可以使用http://本机局域网IP地址:端口的网址访问。如http://192.168.1.56:8080

【文件夹路径】web服务的根目录。打开网址时,自动列出此目录中的文件夹和文件。

此目录留空时(在Http服务用于纯的自定义请求处理时使用),自动在Windows临时目录中创建一个空目录。

【默认文档】用作网页浏览功能时,可设置默认文档,通常为“index.html”。当浏览某个目录时,如果目录下有此名称的文档,将自动加载此文档而不是列出目录中的内容。

【基础验证密码】对http服务开启Basic Authentication时,所对应的密码(账号固定为quicker)。如果您和其他人共享网络,建议开启密码以避免意外的访问。 如果在家里等安全网络,也可以不开启密码验证。

【服务id】为服务设定一个标识。可在后续步骤中更新服务、关闭服务时使用。如果在创建服务时已经有相同id的服务,则会自动关闭前面的服务。

【闲置自动关闭】如果一段时间(秒数)后没有新的请求,自动关闭此服务。0为不自动关闭。

【自定义请求处理】通过子程序自助处理请求。定义方式请参考下面章节。

【HEAD 插入代码】生成浏览目录网页时,自动在<head>末尾插入代码(替换默认代码中的<!--HEAD-CODE-->)。可用于加载自定义的css库引用等。

【BODY 插入代码】在生成浏览目录网页时,自动在<body>末尾插入代码(替换默认代码中的<!--BODY-CODE-->)。可用于加载自定义的js脚本。

输出变量

【服务地址】根据ip、端口号以及是否启用https生成的用于访问此Web服务的网址。

【带账号的地址】当启用访问密码时,将账号和密码放入网址。格式为:https://quicker:密码@网址:端口 (账号统一为quicker)。可以将此网址生成二维码,在手机端扫码直接访问。

  • 注:有一些浏览器不支持此网址格式。如iOS上的Safari浏览器(但是微信和Chrome支持)。有一些PC端浏览器也不支持,如360浏览器。

关闭服务

关闭指定id的服务。

HTTP服务器

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

参考使用方式:

  • 开启服务后,显示等待窗口,待关闭等待窗口后关闭服务。
  • 添加右键菜单用于关闭服务。

获取服务状态

用于获取某个http服务是否在运行中,或得到所有当前运行中的web服务。

HTTP服务器

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

【服务ID】要获取状态的http服务的标识(在创建服务时指定)。

文件服务网页使用

1)当前路径上级路径

2)返回上级目录

3)当前文件夹名称

4)缩略图。对图片、视频等,可点击缩略图进入浏览模式。

5)文件名。点击可使用浏览器默认形式打开或下载。

6)文件大小。点击可作为附件下载。

7)选择文件或文件夹,以打包下载。选中某项后,会显示“全选”“下载”按钮。

8)上传文件到当前文件夹。

9)全选当前文件夹内的所有子文件夹和文件。

10)打包下载所选择的子文件夹和文件。 这里只是简单打包成一个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 是经过网址转义、可继续用于 HTTP GET 的地址。
  • 一次请求可以上传多个不同文件;如果多个文件最终使用同一个名称,请求会被拒绝并恢复上传前的文件,避免静默覆盖。
  • path 不能指向根目录之外,也不能经过目录符号链接、junction 或其它重解析点。
  • 请求必须是标准的 multipart/form-data;普通文本、JSON 或伪造的相似媒体类型会返回 415 Unsupported Media Type
  • 非法路径、无文件等请求错误返回 400,落盘失败等服务器错误返回 500;错误正文使用 application/problem+json
  • 接口沿用当前文件服务器的 HTTPS、访问密码、监听范围和闲置关闭设置,不会另外开启服务或绕过密码。
  • 【自定义请求处理】规则优先于内置接口。如果自定义规则匹配 POST /__api/upload,请求仍交给对应子程序处理。

浏览器目录页原有的上传方式不受影响,上传成功后仍返回目录页面;程序需要结构化结果时才使用 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

路由规则定义

在【自定义请求处理】参数中设置路由规则:

  • 每行一条路由规则。所有规则将按照从上到下的顺序匹配执行,有一项匹配到以后,后面的规则就会被忽略。
  • 每条路由规则格式为:路径:HTTP方法列表:处理请求的子程序名称
  • 路径:URI的AbsolutePath值的匹配字符串。可以完整匹配或使用正则。 例如:/api可用于匹配http://192.168.1.20:8080/api\S+则可以匹配所有请求。
  • HTTP方法列表:哪些HTTP Method使用此规则处理。支持的方法有 GET, POST, PUT, DELETE, HEAD。可使用*表示匹配所有Http Method。示例:GETGET,POST*
  • 处理需求的子程序名称:指定使用哪个子程序处理此需求。子程序需按规定的方式定义输入和输出参数,可参考此模板子程序及本文的后面章节。

下图所示的规则:将任何路径的 GET 和 POST 请求都使用动作内名称为“http请求处理”的子程序处理。

实现需求处理子程序

要点:

  • 子程序需要按规定定义输入和输出参数。可以导入此模板子程序后修改使用。
  • 子程序会被直接执行。动作内主程序的步骤不会被执行,子程序也不需要添加到动作步骤列表中。
  • 子程序内部应当只处理数据并快速返回结果,不应该有任何界面交互的步骤。

子程序的输入

在遇到符合条件的HTTP请求时,Quicker会解析请求内容,并将数据传入子程序变量中。

【Path】请求网址的路径部分。例如对于网址http://192.168.5.114:810/2022年文件/系统设计?action=copy,其路径为/2022年文件/系统设计

【QueryString】查询字符串(网址中问号开始的内容,不一定有)。网址http://192.168.5.114:810/2022年文件/系统设计?action=copy的查询字符串为?action=copy

【QueryDict】转换为词典的查询字符串。

【Method】请求的HTTP Method。可能为GET、POST、PUT、DELETE、HEAD。不支持其他HTTP方法。

【FORM】表单数据词典。当POST请求内容类型为 x-www-form-urlencoded 或 multipart/form-data 时,解析出的表单数据。

【BODY】请求内容类型为 application/json 或 x-www-form-urlencoded 时,返回完整的请求体内容文本。其他内容类型时为空。

【Files】通过 multipart/form-data 表单数据传输文件时,Quicker会自动将文件保存在服务目录中,并返回这些文件的完整路径。可以在后续步骤中根据这些步骤自行处理文件。

同时,也可以在表达式中通过 _context.ExtraData.HttpRequestEventArgs 访问到请求上下文对象。可以使用此对象访问到请求信息并直接返回响应。

子程序的输出

子程序结束时,Quicker将根据子程序的输出变量返回结果到HTTP请求。

【Processed】请求是否已经在子程序内部通过使用 _context.ExtraData.HttpRequestEventArgs响应过了。 如果已经响应过了,将此变量赋值为true,Quicker就不会再进行输出处理。

【StatusCode】需要返回的Http请求状态码。

【ContentType】返回的内容类型(MIME Type)。

【RespBody】返回的内容文本。

更新说明

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

更新于