12 个版本 (3 个稳定版)
1.0.2 | 2024年7月4日 |
---|---|
1.0.1 | 2024年3月31日 |
0.6.0 | 2023年11月21日 |
0.5.2 | 2023年11月18日 |
0.1.0 | 2023年11月11日 |
#929 在 网络编程
每月49次 下载
在 3 个 crate 中使用 (2 个直接使用)
37KB
809 行
🎠 Trotter
Trotter 是一个有趣和实验性的 Gemini 客户端 crate。
安装 trot
命令行工具:cargo install --features cli trotter
。
#[tokio::main]
async fn main() {
trotter::trot("geminiprotocol.net") // gemini:// prefix and root slash can be elided
.await
.unwrap();
trotter::trot_in("localhost/input", "notice me!")
.await
.unwrap();
}
😊 请求
🎭 演员
演员存储与多个请求相关的信息。
use trotter::{Actor, UserAgent};
#[tokio::main]
async fn main() {
let owo = Actor::default()
.user_agent(UserAgent::Indexer)
.cert_file("id/owo.crt")
.key_file("id/owo.key");
owo.get("localhost")
.await
.unwrap();
}
🤖 用户代理
你知道 Gemini 有一个针对标准的 robots.txt
版本吗? (robots.txt for Gemini)
Trotter 内置了机器人功能。一旦设置用户代理,如果您尝试访问不允许访问的页面,将会收到一个 RobotDenied
错误。
如果您使用 Trotter 进行依赖于他人内容的项目的开发,我强烈建议您进行此操作。
🌕 泰坦
Titan 是 Gemini 的姐妹协议,用于上传文件。
要使用 Titan,创建一个 Titan
结构体,并将其传递给 Actor::upload
。
use trotter::{Actor, Titan};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let g = Actor::default()
.upload(
"titan://127.0.0.1/",
Titan {
content: "Example content :DDDDDDDDDDDDDDDDDDDD".into(),
mimetype: "text/plain".into(),
token: None,
},
)
.await?
.gemtext()?;
println!("{g}");
Ok(())
}
📖 解析
use trotter::parse::Gemtext;
fn main() {
let txt = "# 💎
## Is
### So
> effing
* dope
man
=> /path/to/somewhere i can take u there
``` alt text goes here
Here's a table
| The | Best |
|-----|------|
| 😘 | 😪 |
```";
let gemtext = Gemtext::parse(txt);
println!("{gemtext:#?}");
}
提示
证书
安装了 openssl
后,您可以使用以下 shell 函数生成和检查 x509 证书。
certgen() { [ -f "${1:?usage: certgen [domain]}.key" ] || [ -f "$1.crt" ] || ( openssl req -new -subj "/CN=$1" -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -days 3650 -nodes -out "$1.crt" -keyout "$1.key" && printf '📜 Cert generated\n' ) ;}
certinfo(){ openssl x509 -noout -text < "${1:?usage: certinfo [file]}" ;}
待办事项
- 将 --generate-cert 选项添加到 cli。
- 修复损坏的 robots.txt :(
- 豆腐存储目录
- 字节读写超时
依赖关系
~6–15MB
~215K SLoC