如何使用Rust ureq库发送登录POST请求并保留会话Cookie
问题原因
- 参数传递逻辑不匹配:你Python版本通过
data参数将登录信息作为POST表单体提交,而Rust版本调用.query()方法是将参数拼接到URL查询字符串中,后端没有读取到正确的登录参数,自然不会返回会话Cookie。 - 你的Python示例代码存在笔误:你创建了
Session实例却用全局req.post发请求,实际运行时不会保存Cookie,正确写法应为session.post。
解决方法
ureq的Agent默认自带Cookie管理能力,只要全程复用同一个Agent实例,就会自动处理服务端返回的Set-Cookie响应头,后续请求自动携带对应Cookie。你只需要把参数传递方式改成提交表单即可,参考代码如下:
use ureq::Agent; use std::collections::HashMap; fn main() { // 全局复用同一个agent实例 let agent = Agent::new(); // 构造POST表单参数 let mut login_form = HashMap::new(); login_form.insert("procedure", "login"); login_form.insert("username", "JohnSmith"); login_form.insert("password", "hunter7"); // 提交表单发起登录请求 agent.post("somesite.com") .send_form(&login_form) .unwrap(); // 后续接口调用都用同一个agent,会自动携带登录Cookie let api_resp = agent.get("somesite.com/your_target_api").call().unwrap(); }
内容的提问来源于stack exchange,提问作者Ekain06
相关产品推荐
相关产品推荐

