类似于“获取 HTTP 重定向页面的状态代码”,但使用 NET::HTTP 而不是遏制,我正在向将重定向的页面发出 GET 请求:
response = Net::HTTP.get_response(URI.parse("http://www.wikipedia.org/wiki/URL_redirection"))
puts response.code #{
puts response['location']
=> 301
en.wikipedia.org/wiki/URL_redirection
问题是我想知道重定向页面的状态码。在这种情况下,它是 200,但在我的应用程序中,我想检查它是 200 还是其他东西。我看到的解决方案是只调用get_response(response['location'])
,但这在我的应用程序中不起作用,因为重定向的设计方式使得重定向只能被遵循一次。由于第一个 GET 消耗了那个重定向,所以我不能再关注它了。
有什么方法可以获取 GET 的最后一个状态码吗?
编辑:进一步澄清情况:
我发送 GET 到的应用程序有一个单点登录身份验证机制,如果我想访问“myapp/mypage”,我必须先发送一个帖子:
postResponse = Net::HTTP.post_form(URI.parse("http://myapp.com/trusted"), {"username" => @username})
然后发出 GET 请求:
'http://myapp.com/trusted/#{postResponse.body}/mypage
*这postResponse.body
是一张可以兑换一次的“票”。
该 GET 验证票证是否有效,然后重定向到:
myapp.com/mypage
所以无论这张票是否有效,我都会得到一个 301。
我想查看最后进入 myapp.com/mypage 的状态码。
如果我手动尝试跟随重定向,无论是 HEAD 请求还是 GET,原始重定向将已经消耗了票证,因此即使原始重定向是 200,我也会收到票证已过期的错误。