C# 实战:模拟登录并发布文章到 EMLOG:零点博客技术笔记
最近在折腾零点博客时,总有些数据想实时同步过来。纯手写太麻烦,我就琢磨着用写了一半的 C# 控制台程序来帮个忙。作为一个喜欢记笔记的开发者,这过程肯定少不了踩坑,所以特意整理了这篇技术笔记。
目标很简单:让 C# 代码能去我们的 EMLOG 博客后台“发号施令”,模拟一个管理员的动作发布一篇文章。这对做自动化工具的朋友可能有用。
准备阶段:看看浏览器在干什么
想用代码实现,首先得知道后端要什么。我习惯直接打开浏览器开发者工具(F12),切换到 Network(网络)标签,然后手动点一下“发布文章”按钮。
在请求里,我发现了两个关键点:
- 接口地址:通常在 AJAX 请求里能找到,或者是某个后台 API 文件。
- 鉴权方式:我习惯用 Cookie 方式,这和普通的登录一样,拿到登录后的 Session ID 就行。
核心代码:C# 实现 HttpClient
这是我项目中的一段核心逻辑,直接去重、改造后拿过来用的。主要是利用 C# 的 HttpClient 发送 POST 请求。
// 初始化客户端并设置基础地址
using (var client = new HttpClient())
{
// 必须设置这个 Header,否则 EMLOG 可能会返回 404
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 ...");
// 1. 先登录,获取 Cookie(简单示例,省略了 CookieContainer 复杂处理)
var loginData = new { ... };
var loginContent = new FormUrlEncodedContent(loginData);
var loginResponse = await client.PostAsync("/admin/ajax_login.php", loginContent);
var cookies = loginResponse.Headers.GetValues("Set-Cookie");
// 2. 准备发布文章的数据
var postContent = new
{
title = "来自C#的自动问候",
content = "这是用代码自动发布的测试内容,记录在零点博客。",
slug = "auto-post-csharp",
hide = "0"
};
// 3. 发送发布请求
var json = JsonConvert.SerializeObject(postContent);
var httpContent = new StringContent(json, Encoding.UTF8, "application/json");
// 注意:这里需要把上面获取的 Cookie 加到请求头里,或者使用 CookieContainer
var response = await client.PostAsync("/admin/ajax_save.php", httpContent);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
踩坑记录:细节决定成败
在实现的过程中,我发现几个点如果不注意,很容易报错:
- Cookie 传递:如果在发送发布请求时忘了带上登录后的 Cookie,服务器是认不出你是谁的,直接返回 401 或空数据。这一步在代码里通常比较繁琐,需要管理 CookieContainer。
- JSON 格式:EMLOG 的接口有时候对 JSON 格式要求很严,字段名必须完全对应,不能多也不能少。我在调试的时候就把 slug 拼错了一次,搞了半天。
- 字符编码:发布中文内容时,一定要确保
Encoding.UTF8没搞错,否则出现乱码就尴尬了。
写在最后
其实建站开发就是在一次次折腾中进步的。这篇技术笔记主要记录了如何用 C# 调用 EMLOG 接口的过程。如果你也有类似的需求,比如定时抓取资讯自动发到博客,这种解耦的方式比硬编码在 PHP 里要灵活得多。
好了,今天就先折腾到这。希望能帮到同样在做自动化开发的同行们。



评论一下吧
取消回复