GoogleDriveが数日前よりCookieにSameSite属性(None)をセットするようになった。
Rubyの標準ライブラリであるWebAgent::CookieManagerはSameSite属性に対応していない。
また、未知の属性がCookieにセットされていた場合は、標準エラーを吐く。
従って、Cronでスクリプトを起動していると、標準エラー発生を通知するメールが、毎時届くようになってしまった。
と、多分、このようなことが起きていたのだと思う。
メールがウザすぎるので、parseメソッドだけオーバーライドしてみた。
標準エラーでなく例外を吐いてくれたら、こんなことせずに済むのだけれど、多分、深い理由があるのでしょうね。
core_ext.rb
class WebAgent
class Cookie
def parse(str, url)
@url = url
cookie_elem = str.split(/;/)
cookie_elem = join_quotedstr(cookie_elem, ';')
cookie_elem -= [""]
first_elem = cookie_elem.shift
if first_elem !~ /([^=]*)(\=(.*))?/
return
end
@name = $1.strip
@value = normalize_cookie_value($3)
cookie_elem.each{|pair|
key, value = pair.split(/=/, 2)
key.strip!
value = normalize_cookie_value(value)
case key.downcase
when 'domain'
@domain = value
when 'expires'
@expires = nil
begin
@expires = Time.parse(value).gmtime if value
rescue ArgumentError
end
when 'path'
@path = value
when 'secure'
@secure = true
when 'httponly'
@http_only = true
when 'samesite' # samesite属性
@samesite = true
else
warn("Unknown key: #{key} = #{value}")
end
}
end
end
end