Daily Study
更新: 8/11/2025 字数: 0 字 时长: 0 分钟
Daily Plan
#todo
- [ ]
CSRF验证
核心流程
启动一个会话 (Session):使用一个支持会话的对象(而不是发单个请求),这样可以自动管理和发送 Cookies,就像浏览器一样。这是整个流程能走通的基础。
第一次请求 (GET):向目标页面(例如登录页)发送一个 GET 请求。服务器会返回这个页面,并在响应中设置必要的会话 Cookie,同时页面的 HTML 中会包含一个 CSRF 令牌。
解析页面并提取令牌 (Parse & Extract):从 GET 请求返回的 HTML 内容中,像浏览器一样“读取”并找出那个隐藏的
csrfCode
(CSRF Token)。构建并发送请求 (POST):将你要提交的数据(例如用户名、密码)和刚刚提取到的 CSRF 令牌组合在一起,向服务器发送一个 POST 请求。由于你使用的是同一个会话,请求会自动带上正确的 Cookie。
验证结果:检查 POST 请求的响应,判断操作是否成功(例如,是否登录成功并跳转到了新页面)。
所需工具
Python 库会用到:
requests
: 用于发送 HTTP 请求和管理会话。BeautifulSoup
: 用于解析 HTML 并轻松地提取数据。
Go库会用到
net/http
: Go 官方标准库,用于发送 HTTP 请求和管理客户端。其中的http.Client
配合net/http/cookiejar
可以实现与 Pythonrequests.Session
同样的效果。net/url
: 用于构建 POST 请求中的表单数据。github.com/PuerkitoBio/go-query
: 一个非常流行且功能强大的库,它模仿 jQuery 的 API 来解析和操作 HTML 文档,可以看作是 Go 版本的BeautifulSoup
。
Go 与 Python 实现对比
特性 | Python 实现 (requests + BeautifulSoup ) | Go 实现 (net/http + go-query ) |
---|---|---|
会话管理 | requests.Session() 对象自动管理 Cookies。 | 通过 net/http/cookiejar 创建 jar 并赋给 http.Client 实例。 |
HTTP 请求 | session.get() / session.post() ,API 非常简洁。 | 使用 http.NewRequest() 创建请求,再用 client.Do() 发送,更底层,步骤更明确。 |
HTML 解析 | BeautifulSoup(html_text, 'lxml') ,使用 find() 等方法。 | goquery.NewDocumentFromReader() ,使用 Find() 和类似 jQuery 的链式调用。 |
错误处理 | 使用 try...except 块来捕获异常。 | 显式地检查每个可能返回 error 的函数调用 (if err != nil )。这是 Go 的核心特性。 |
资源管理 | 通常由垃圾回收器自动处理。 | 必须手动使用 defer resp.Body.Close() 来关闭响应体,否则会导致资源泄露。 |
代码风格 | 简洁,动态类型。 | 更为冗长,静态类型,但逻辑非常清晰,且编译时能发现更多错误。 |