complete url if location header is relative path
This commit is contained in:
parent
226908b5ba
commit
810f9ae430
@ -6,6 +6,10 @@ WebMock.stub(:post, "http://example.com/post")
|
|||||||
.with(body: "email=foobar", headers: {"Content-Type" => "application/x-www-form-urlencoded"})
|
.with(body: "email=foobar", headers: {"Content-Type" => "application/x-www-form-urlencoded"})
|
||||||
.to_return(status: 302, body: "redirect", headers: {"Location" => "http://example.com/redirect"})
|
.to_return(status: 302, body: "redirect", headers: {"Location" => "http://example.com/redirect"})
|
||||||
|
|
||||||
|
WebMock.stub(:post, "http://example.com/post2")
|
||||||
|
.with(body: "email=foobar", headers: {"Content-Type" => "application/x-www-form-urlencoded"})
|
||||||
|
.to_return(status: 302, body: "redirect", headers: {"Location" => "/redirect"})
|
||||||
|
|
||||||
describe "Mechanize redirect test" do
|
describe "Mechanize redirect test" do
|
||||||
it "redirect" do
|
it "redirect" do
|
||||||
agent = Mechanize.new
|
agent = Mechanize.new
|
||||||
@ -14,4 +18,12 @@ describe "Mechanize redirect test" do
|
|||||||
page.body.should eq("success")
|
page.body.should eq("success")
|
||||||
page.code.should eq(200)
|
page.code.should eq(200)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "redirect with relative path" do
|
||||||
|
agent = Mechanize.new
|
||||||
|
query = {"email" => "foobar"}
|
||||||
|
page = agent.post("http://example.com/post2", query: query)
|
||||||
|
page.body.should eq("success")
|
||||||
|
page.code.should eq(200)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -32,15 +32,15 @@ module MechanizeCr
|
|||||||
save_response_cookies(response, uri, page)
|
save_response_cookies(response, uri, page)
|
||||||
|
|
||||||
if response && response.status.redirection?
|
if response && response.status.redirection?
|
||||||
return follow_redirect(response, headers)
|
return follow_redirect(response, headers, page)
|
||||||
end
|
end
|
||||||
|
|
||||||
page
|
page
|
||||||
end
|
end
|
||||||
|
|
||||||
private def follow_redirect(response, headers)
|
private def follow_redirect(response, headers, referer)
|
||||||
redirect_url = response.headers["location"]
|
redirect_url = response.headers["location"]
|
||||||
uri = URI.parse(redirect_url)
|
uri = resolve_url(redirect_url, referer)
|
||||||
|
|
||||||
# Make sure we are not copying over the POST headers from the original request
|
# Make sure we are not copying over the POST headers from the original request
|
||||||
headers.delete("Content-MD5")
|
headers.delete("Content-MD5")
|
||||||
|
Loading…
Reference in New Issue
Block a user