gpt4 book ai didi

ruby-on-rails - 使用 HTTParty 解析 HTTP header 'set-cookie'

转载 作者:行者123 更新时间:2023-12-02 01:27:22 25 4
gpt4 key购买 nike

我正在使用 HTTParty 来发出 HTTP 请求和使用 REST API。现在我想重新使用我通过 POST 调用的登录页面设置的 cookie。

class SomeImporter
include HTTParty

def self.login
response = self.post('https://www.example.com/login', :query => {:user => 'myusername', :password => 'secret'})
self.default_cookies.add_cookies(response.header['set-cookie'])
self.get('https://www.example.com/protected')
end
end

使用此代码未正确设置 cookie。
如何正确解析 HTTParty 给出的“set-cookie” header 并为下一个请求设置 cookie?

最佳答案

通常,HTTP header 中的每个 Set-Cookie 都有一个条目。 HTTParty 将它们合并为一个字符串作为逗号分隔的列表。但是 HTTParty 在将它们添加回默认 cookie 时不会自行拆分它们。你必须自己解析它们。

可以使用以下方法解析“set-cookie”。将其添加到您的类(class)中:

# Parse the 'set-cookie' string
# @param [String] all_cookies_string
# @return [Hash]
def self.parse_set_cookie(all_cookies_string)
cookies = Hash.new

if all_cookies_string.present?
# single cookies are devided with comma
all_cookies_string.split(',').each {
# @type [String] cookie_string
|single_cookie_string|
# parts of single cookie are seperated by semicolon; first part is key and value of this cookie
# @type [String]
cookie_part_string = single_cookie_string.strip.split(';')[0]
# remove whitespaces at beginning and end in place and split at '='
# @type [Array]
cookie_part = cookie_part_string.strip.split('=')
# @type [String]
key = cookie_part[0]
# @type [String]
value = cookie_part[1]

# add cookie to Hash
cookies[key] = value
}
end

cookies
end

通过调整此行,可以将 cookie 添加到 HTTParty 以用于以下请求:
self.default_cookies.add_cookies(self.parse_set_cookie(response.header['set-cookie']))

self.parse_set_cookie 中,cookie 仅使用名称和值提取。您可以扩展它以获取更多详细信息,例如 PathDomain 等。有关更多详细信息,请参阅 RFC 2109(4.2.2 Set-Cookie 语法)。

关于ruby-on-rails - 使用 HTTParty 解析 HTTP header 'set-cookie',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36330053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com