前言:零点博客的第一次“血泪”复盘

哈喽大家好,我是零点博客的博主。最近在做项目复盘时,发现很多新手在用 C# 开发后端去对接第三方接口,或者自己写爬虫把数据落库到 EMLOG 这类 CMS 系统时,最容易翻车的两个环节就是:接口数据解析数据库存取安全。今天不整虚的,直接拿出代码案例,为大家奉上一份保姆级的实战避坑指南。

一、 爬虫实战:C# 获取 JSON 数据与解析

首先我们得把数据抓下来。这里我封装了一个简单的 HttpClient 方法。注意,直接把抓取到的字符串拿去拼接 SQL 是大忌,但在拿到数据之前,我们要先处理 JSON。

public string GetDataFromApi(string url)
{
    using (var client = new HttpClient())
    {
        // 设置超时时间,防止接口卡死
        client.Timeout = TimeSpan.FromSeconds(10);
        var response = client.GetAsync(url).Result;
        return response.Content.ReadAsStringAsync().Result;
    }
}

拿到返回值后,如果对方返回的是 JSON 格式,我们可以用 Newtonsoft.Json 库。这里有个小技巧:反序列化到匿名对象 最快,不需要建实体类。

dynamic result = JsonConvert.DeserializeObject(responseString);
var title = result.data.title; // 动态访问属性
var content = result.data.content;

二、 底层避坑:SQL注入与预处理语句

这是本次避坑指南的核心!我见过太多人把爬虫数据直接拼接 SQL 语句插入数据库,这简直是给黑客留后门。无论你是对接 PHP 还是开发 C# 后端,严禁字符串拼接 SQL

❌ 坏代码(绝对不要这样写):

string sql = "INSERT INTO emlog_article (title, content) VALUES ('" + title + "', '" + content + "')";
// 一旦 title 包含 " OR '1'='1,数据库直接炸膛

✅ 好代码(使用预处理语句):

在 C# 中,请务必使用 SqlCommand 配合 SqlParameter

string sql = "INSERT INTO emlog_article (title, content, uid) VALUES (@title, @content, @uid)";

using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
    // 强制类型转换与参数化绑定,自动过滤非法字符
    cmd.Parameters.AddWithValue("@title", title);
    cmd.Parameters.AddWithValue("@content", content);
    cmd.Parameters.AddWithValue("@uid", 1);

    conn.Open();
    cmd.ExecuteNonQuery();
}

这就是处理 MySQL 数据库时必须遵守的铁律,哪怕你觉得代码量增加了一些,但换来的是系统的安全。

三、 数据落地:正则表达式清洗脏数据

爬下来的数据往往带着一堆 HTML 标签或者乱码。这时候就需要 正则表达式 出马了。在将清洗后的文本存入 EMLOG 之前,建议先用正则去除多余标签,只保留纯文本或你想保留的格式。

string htmlContent = "<p>Hello <b>World</b></p>";
string cleanContent = Regex.Replace(htmlContent, @"<[^>]+>", string.Empty); // 移除所有HTML标签

四、 后记:接口开发与 HTML/CSS 调试

最后多说一句,当我们把数据完美存入 MySQL 后,前端展示 HTML/CSS 的对接也是重头戏。大家在调试接口返回的 JSON 数据时,别忘了打开浏览器开发者工具的 Network 面板,看清楚 HTTP 状态码是 200 还是 404。

以上就是关于爬虫开发、接口解析以及防 SQL 注入的详细复盘。希望这份干货能帮到大家,少踩坑,多写代码!关注零点博客,获取更多底层技术拆解。