English | 简体中文
HttpCat 是一个基于go实现的 HTTP 的文件传输服务,旨在提供简单、高效、稳定的文件上传和下载功能。
项目目标:一个可靠、高效、易用的HTTP文件传输瑞士军刀,它将大大提高你的文件传输控制力和体验。 无论是临时分享还是批量传输文件,HttpCat都将是你的优秀助手。
- 简单易用
- 无需外部依赖,易于移植
演示环境:139.198.178.238:8888 admin/admin
v0.1.2版本以及之后版本,可以直接下载最新的httpcat安装包,解压后,直接运行install.sh即可。
mkdir target_directory
tar -zxvf httpcat_v0.1.2.tar.gz -C target_directory
cd target_directory/release
./install.sh
当然,您也可以参考下面的安装步骤,手动安装,只是前端文件我们已经打包到安装包中,不需要单独下载前端文件。
-
下载最新httpcat安装包
https://github.com/shepf/httpcat-release/tags
-
规划和创建httpcat使用的目录 假设,我们计划如下启动项目:
/usr/local/bin/httpcat --port=80 --static=/home/web/website/httpcat_web/ --upload=/home/web/website/upload/ --download=/home/web/website/upload/ -C /etc/httpdcat/svr.yml
- --port 指定httpcat监听端口
- --upload 指定上传文件目录:
- --download 指定下载文件目录:
- -C 指定使用的配置文件 (注意:根据需要修改sqlite文件存储位置:sqlite_db_path: "./data/sqlite.db" )
准备上传文件目录(这里上传和下载我们使用相同目录):
mkdir -p /home/web/website/upload/
准备web静态资源目录:
mkdir -p /home/web/website/httpcat_web/
准备配置文件存放目录:
mkdir -p /etc/httpdcat/
-
安装过程
mkdir httpcat
cd httpcat
上传安装包 httpcat_v0.1.1.tar.gz、httpcat_web_v0.1.1.zip
安装httpcat
tar -zxvf httpcat_v0.1.1.tar.gz
cp httpcat /usr/local/bin/
cp conf/svr.yml /etc/httpdcat/
安装httpcat_web
cp httpcat_web_v0.1.1.zip /home/web/website/
cd /home/web/website/
unzip httpcat_v0.1.1.tar.gz
mv dist httpcat_web
检查
httpcat -v
httpcat -h
windows下运行参数同linux,只是使用httpcat.exe替换httpcat
httpcat.exe --upload /home/web/website/download/ --download /home/web/website/download/ -C F:\open_code\httpcat\server\conf\svr.yml
可以利用tmux方式后台运行:
Create a new tmux session using a socket file named tmux_httpcat
$ tmux -S tmux_httpcat
# 进入tmux后,可以执行运行命令,如:
httpcat --static=/home/web/website/upload/ -C server/conf/svr.yml
Move process to background by detaching
Ctrl+b d OR ⌘+b d (Mac)
To re-attach
$ tmux -S tmux_httpcat attach
Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
$ tmux new-session -A -D -s tmux_httpcat
To delete farming session
$ tmux kill-session -t tmux_httpcat
安装包自带了一个httpcat.service文件,可以直接使用systemd运行在后台,你可以根据自己的需要修改httpcat.service文件。
例如:修改httpcat.service文件中的ExecStart参数,修改为你的启动参数。
比如添加监听端口参数:--port=80
ExecStart=/usr/local/bin/httpcat --port=80 --static=/home/web/website/httpcat_web/ --upload=/home/web/website/upload/ --download=/home/web/website/upload/ -C /etc/httpdcat/svr.yml
cp httpcat.service /usr/lib/systemd/system/httpcat.service
sudo systemctl daemon-reload
sudo systemctl start httpcat
注意:根据你的业务需要修改启动参数 比如:一个最简单的应用场景:3个目录一致(则上传目录就是下载目录,并且也是web前端目录,可以无认证直接下载):
vi httpcat.service
ExecStart=/usr/local/bin/httpcat --static=/home/web/website/upload/ --upload=/home/web/website/upload/ --download=/home/web/website/upload/ -C /etc/httpdcat/svr.yml
可以利用tmux方式后台运行:
Create a new tmux session using a socket file named tmux_httpcat
$ tmux -S tmux_httpcat
# 进入tmux后,可以执行运行命令,如:
httpcat --static=/home/web/website/upload/ -C server/conf/svr.yml
Move process to background by detaching
Ctrl+b d OR ⌘+b d (Mac)
To re-attach
$ tmux -S tmux_httpcat attach
Alternatively, you can use the following single command to both create (if not exists already) and attach to a session:
$ tmux new-session -A -D -s tmux_httpcat
To delete farming session
$ tmux kill-session -t tmux_httpcat
安装包自带了一个httpcat.service文件,可以直接使用systemd运行在后台,你可以根据自己的需要修改httpcat.service文件。
例如:修改httpcat.service文件中的ExecStart参数,修改为你的启动参数。
比如添加监听端口参数:--port=80
ExecStart=/usr/local/bin/httpcat --port=80 --static=/home/web/website/httpcat_web/ --upload=/home/web/website/upload/ --download=/home/web/website/upload/ -C /etc/httpdcat/svr.yml
cp httpcat.service /usr/lib/systemd/system/httpcat.service
sudo systemctl daemon-reload
sudo systemctl start httpcat
注意:根据你的业务需要修改启动参数 比如:一个最简单的应用场景:3个目录一致(则上传目录就是下载目录,并且也是web前端目录,可以无认证直接下载):
vi httpcat.service
ExecStart=/usr/local/bin/httpcat --static=/home/web/website/upload/ --upload=/home/web/website/upload/ --download=/home/web/website/upload/ -C /etc/httpdcat/svr.yml
新版本增加了前端页面,v0.1.1之前前端采用独立发布形式,根据需要,用户选择下载。 v0.1.2版本以及之后版本,前端直接合入安装包,不需要单独下载前端文件。
因为httpcat自带静态资源文件处理,用户可以自由选择是否使用前端页面。
本前端是单页面应用,生产环境静态资源走 static 路由,api接口走 api 路由。如果用户自搭nginx,注意配置 /static 路由到静态资源目录,/api 路由到 httpcat 服务。
下载前端发布文件,解压到web目录,httpcat 会自动加载web目录下的静态资源文件。 httpcat web目录由配置文件中的static指定,如果不指定,默认为当前目录下的 website/static目录。 或者使用命令行参数指定,如:
--static=/home/web/website/httpcat_web/
- 下载前端独立发布文件,如 httpcat_web_v0.0.7.zip
- 解压到web目录
Assuming the web directory configured for httpcat is:
/home/web/website/httpcat_web/
cd /home/web/website/ unzip httpcat_web_v0.1.1.zip mv dist httpcat_web
- 启动httpcat服务
启动服务需要指定web界面目录,使用 --static 参数指定,如:
./httpcat --static=/home/web/website/httpcat_web/ -C conf/svr.yml
- 访问httpcat 前端服务
http://127.0.0.1:8888
curl -v -F "f1=@/root/hello.mojo" -H "UploadToken: httpcat:dZE8NVvimYNbV-YpJ9EFMKg3YaM=:eyJkZWFkbGluZSI6MH0=" http://localhost:8888/api/v1/file/upload
使用了 curl
命令来向指定的 URL 发送一个 multipart/form-data
格式的 POST 请求。下面是对每部分的解释:
curl
: 一个用来与服务器端进行数据传输的工具,支持多种协议。-v
: 在命令执行时输出详细的操作信息,即 verbose 模式。-F "f1=@/root/hello.mojo"
: 指定了要发送的表单数据。-F
选项表示要发送一个表单,f1=@/root/hello.mojo
表示要上传的文件字段名为f1
,文件路径为/root/hello.mojo
。这个字段的值是指向本地文件的相对或绝对路径。http://localhost:8888/api/v1/file/upload
: 要发送请求到的 URL,这条命令会将文件上传到这个 URL。-H "UploadToken: httpcat:dZE8NVvimYNbV-YpJ9EFMKg3YaM=:eyJkZWFkbGluZSI6MH0="
: 上传token,根据app_key、app_secret生成独立的上传token凭证。上传文件时候,附带上传token,服务端会校验token是否合法。
注意: f1 为服务端代码定义的,修改为其他,如file,会报错上传失败。
如果配置文件开启了 enable_upload_token
,那么上传文件需要认证,需要在请求头中添加 上传token,token的值为配置文件中的enable_upload_token
值。
根据app_key、app_secret生成独立的上传token凭证。上传文件时候,附带上传token,服务端会校验token是否合法。
上传token,根据app_key、app_secret生成。系统会根据配置文件内置一个app_key、app_secret。
注意:系统内置的app_key、app_secret,只能通过svr.yml来修改,不能通过界面修改,重启httpcat会加载系统内置的app_key、app_secret。
如:svr.yml文件中配置如下:
app_key: "httpcat"
app_secret: "httpcat_app_secret"
除了系统内置的app_key、app_secret,还可以通过界面添加自定义的app_key、app_secret, 可以通过界面根据app_key、app_secret生成上传token。 如下图,可以通过点击“生成上传token”按钮,获取上传token。
配置svr.yml文件中的persistent_notify_url
,上传成功后,会发送企业微信通知。
通知信息如下:
有文件上传归档,上传信息:
- IP地址:192.168.31.3
- 上传时间:2023-11-29 23:07:04
- 文件名:syslog.md
- 文件大小:4.88 KB
- 文件MD5:8346ecb8e6342d98a9738c5409xxx
如果配置开启了 enable_sqlite,那么上传文件会记录到sqlite数据库中,可以通过sqlite3命令行工具查询上传历史记录。
使用sqlite3命令行工具创建数据库,查询数据
sudo apt install sqlite3
sqlite3 --version
运行以下命令启动 sqlite3 工具,并指定要创建的数据库文件名(例如 mydatabase.db):
sqlite3 sqlite.db
在 sqlite3 提示符下,输入 .tables
命令来列出数据库中的所有表:
.tables
SELECT * FROM notifications;
下载某个特定文件:
wget -O syslog222 http://{{ip}}:{{port}}/api/v1/file/download?filename=syslog222
当您使用 wget 命令下载文件时,文件的名称由请求 URL 中的文件名部分确定。由于 URL 参数的存在,wget 命令可能会将整个 URL 当做文件名。 为了确保下载的文件名正确,您可以使用 -O 参数来指定文件名:
需要配置文件开启p2p功能,默认关闭
http://{{ip}}:{{port}}/api/v1/p2p/send_message
POST
{
"topic": "httpcat",
"message": "ceshi cccccccccccc"
}
- HTTPS support
Feel free to raise an issue. Good luck! 🍀
如果忘记密码,可以修改sqlite数据库,删除admin用户,重启httpcat服务,会重新创建admin用户。 或者直接删除sqlite数据库,重启httpcat服务,会重新创建sqlite数据库。
默认的sqlite数据库路径,由配置文件中的sqlite_db_path指定,默认为:./data/sqlite.db
,可以通过配置文件修改sqlite数据库路径。
我们找到这个文件,并删除这个文件,然后重启httpcat即可。
find / -name sqlite.db
rm xxx/sqlite.db
- 本软件仅供个人使用,禁止用于商业目的。
- 本软件的复制、分发、修改和使用应遵循以下条件:
- 禁止用于商业目的。
- 禁止将本软件用于任何商业产品或服务。
- 保留软件中的版权和许可声明。
- 除非获得明确的书面许可,禁止修改或删除软件中的版权和许可声明。
- 本软件按 "原样" 提供,作者不承担任何明示或暗示的保证和责任。
- 如果您使用了本软件,即表示您已接受此许可协议。
Good luck! 🍀