class WeChat::Bot::HTTP::Session
可保存 Cookies 的 HTTP
请求类
简单实现 Python 版本 {docs.python-requests.org/zh_CN/latest/user/advanced.html#session-objects requests.Session()}
Attributes
Public Class Methods
new(bot)
click to toggle source
# File lib/wechat/bot/http/session.rb, line 12 def initialize(bot) @bot = bot load_cookies(@bot.config.cookies) end
Public Instance Methods
delete(url, options = {})
click to toggle source
@return [HTTP::Response]
# File lib/wechat/bot/http/session.rb, line 34 def delete(url, options = {}) request(:delete, url, options) end
get(url, options = {})
click to toggle source
@return [HTTP::Response]
# File lib/wechat/bot/http/session.rb, line 19 def get(url, options = {}) request(:get, url, options) end
post(url, options = {})
click to toggle source
@return [HTTP::Response]
# File lib/wechat/bot/http/session.rb, line 24 def post(url, options = {}) request(:post, url, options) end
put(url, options = {})
click to toggle source
@return [HTTP::Response]
# File lib/wechat/bot/http/session.rb, line 29 def put(url, options = {}) request(:put, url, options) end
request(verb, url, options = {})
click to toggle source
@return [HTTP::Response]
# File lib/wechat/bot/http/session.rb, line 39 def request(verb, url, options = {}) prepare_request(url) if options[:timeout] connect_timeout, read_timeout = options.delete(:timeout) @client = @client.timeout(connect: connect_timeout, read: read_timeout) end response = @client.request(verb, url, options) update_cookies(response.cookies) @bot.logger.verbose "[#{verb.upcase}] #{url}" @bot.logger.verbose "Options: #{options}" @bot.logger.verbose "Response: #{response.body}" response end
Private Instance Methods
prepare_request(url)
click to toggle source
组装 request 基础请求参数
- 设置 User-Agent - 设置 Cooklies
@api private @param [String] url @return [HTTP::Request]
# File lib/wechat/bot/http/session.rb, line 67 def prepare_request(url) @client = ::HTTP.headers(user_agent: @bot.config.user_agent, "Range" => "bytes=0-") return @client if @cookies.nil? return @client = @client.cookies(@cookies) # TODO: 优化处理同一顶级域名的 cookies # uri = URI(url) # unless @cookies.empty?(uri) # cookies = @cookies.clone # cookies.cookies.each do |cookie| # cookies.delete(cookie) if uri.host != cookie.domain # end # unless cookies.empty?(uri) # @client = @client.cookies(@cookies) # end # end end