如何在Mechanize的GET方法请求头中传递Cookie?
你的问题出在手动传递Cookie请求头是多余且错误的,Mechanize的Agent对象会自动管理CookieJar,POST请求后获得的Cookie会被自动保存,后续用同一个Agent发起GET请求时会自动携带所需Cookie。
你的代码问题分析
你在mechanize_call方法里手动构造Cookie请求头,但@cookie_val是Mechanize的Cookie对象,不是符合HTTP格式的字符串,而且这种方式会绕过Agent的Cookie管理机制,导致Cookie无法正确传递。
正确的实现方式
只需要确保使用同一个Mechanize Agent执行POST和GET请求,Agent会自动处理Cookie的保存和携带:
# 初始化Mechanize Agent(建议在类初始化或方法开头完成) @agent = Mechanize.new def get_body_2 { "ctl00$Content$ddSpecialization" => "Appellate Practice" } end def post_request url = 'https://portal.ncbar.gov/verification/search.aspx' body = get_body_2 # 执行POST请求,Agent自动将返回的Cookie存入CookieJar @agent.post(url, body) end def mechanize_call url = 'https://portal.ncbar.gov/Verification/results.aspx' # 直接用同一个Agent发起GET请求,自动携带之前POST获取的Cookie page = @agent.get(url) # 此处可直接处理结果页面数据,比如打印页面内容 puts page.body end # 按顺序调用:先执行POST获取Cookie,再发起GET请求 post_request mechanize_call
额外说明
- 若要查看当前Agent保存的所有Cookie,可使用
@agent.cookies命令查看Cookie对象列表 - 若遇到Cookie未自动携带的情况,检查Cookie的domain、path属性是否与GET请求的URL匹配,Mechanize只会发送符合匹配规则的Cookie
内容的提问来源于stack exchange,提问作者zargham shahid
相关产品推荐
相关产品推荐

