You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby中实现Python requests.session等效的会话请求功能

在Ruby中实现类似Python Requests的会话保持功能

嘿,我懂你想要的那种不用手动折腾Cookie、能自动保持会话的体验——Python的requests.session()确实用着省心!在Ruby里其实也有对应的解决方案,给你两种靠谱的实现方式:

方案1:用Faraday库(推荐,最接近requests.session的体验)

Faraday是Ruby生态里非常流行的HTTP客户端,它支持通过连接对象自动管理会话状态(比如Cookie),用法和requests.session()几乎一致,不用手动处理Cookie的提取和携带。

步骤1:安装Faraday

首先安装这个gem:

gem install faraday

或者在你的Gemfile里添加:

gem 'faraday'

然后执行bundle install。

步骤2:编写会话请求代码

require 'faraday'
require 'faraday_middleware'  # 用于CookieJar中间件

# 创建一个带会话管理的连接对象
session = Faraday.new(url: "https://test.url.com") do |config|
  config.use FaradayMiddleware::CookieJar  # 启用Cookie Jar自动保存会话Cookie
  config.adapter Faraday.default_adapter    # 使用默认的HTTP适配器(基于Net::HTTP)
end

# 发送登录请求,Cookie会自动被保存
session.post("/mobile/User/logIn", { 
  username: "test.user@gmail.com", 
  password: "123456abc" 
})

# 发送后续的订单查询请求,会话Cookie会自动携带
orders_response = session.get("/mobile/User/Order/MyOrders")

# 处理响应结果
puts orders_response.status
puts orders_response.body

这段代码里,FaradayMiddleware::CookieJar会自动帮你存储登录请求返回的Cookie,后续所有通过这个session对象发送的请求都会自动带上这些Cookie,完全和Python的requests.session()逻辑一致。

方案2:手动用Net::HTTP管理Cookie(无额外依赖)

如果你不想引入新的gem,也可以用Ruby标准库的Net::HTTP手动处理Cookie——其实就是把登录请求得到的Cookie提取出来,在后续请求的请求头里带上。

require 'net/http'
require 'uri'

# 1. 发送登录请求,获取会话Cookie
login_uri = URI("https://test.url.com/mobile/User/logIn")
login_params = { username: "test.user@gmail.com", password: "123456abc" }

# 发送POST请求
login_response = Net::HTTP.post_form(login_uri, login_params)
# 提取返回的Cookie(可能有多个,用分号分隔)
session_cookies = login_response.get_fields('Set-Cookie')

# 2. 发送订单查询请求,带上刚才获取的Cookie
orders_uri = URI("https://test.url.com/mobile/User/Order/MyOrders")
orders_request = Net::HTTP::Get.new(orders_uri)
# 把Cookie添加到请求头
orders_request['Cookie'] = session_cookies.join('; ')

# 发送GET请求
orders_response = Net::HTTP.start(orders_uri.host, orders_uri.port, use_ssl: orders_uri.scheme == 'https') do |http|
  http.request(orders_request)
end

# 处理响应
puts orders_response.status
puts orders_response.body

这种方式需要自己处理Cookie的提取和拼接,虽然麻烦一点,但不用额外安装依赖,适合对项目依赖有严格要求的场景。

内容的提问来源于stack exchange,提问作者Mesut GUNES

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:27:13