Net::HTTP Cookies / Headers (almost there...)

S

Sy Ys

I'm attempting to login and follow redirects, however, the below script
doesn't seem to do it. I arrive back at the main login page. Am I doing
something obviously wrong? Am I passing bad headers or wrong cookies?
See comments below.

Also, please don't tell me to use Mechanize. I'm trying to improve the
documentation of this library.

Code ------------------
domain = 'login.domain.com'
script = '/login.cfm'
params = '[email protected]&password=passw4rd'
Net::HTTP.start(domain,80){|http|
loginRsp = http.post2(script,params)
loginRsp.each {|key, val| puts key + ' = ' + val}
puts "FIRST RESPONSE===========\r"
puts loginRsp['location'] #Seems ok => Login2.domain.com
request = Net::HTTP::Get.new(loginRsp['location'])
headers = {'Cookie' => loginRsp.response['set-cookie']}
firstRsp = http.request(request,headers)
puts "SECOND RESPONSE===========\r"
puts firstRsp['location'] #Might be ok. =>
Login.domain.com
request = Net::HTTP::Get.new(firstRsp['location'])
headers = {'Cookie' => firstRsp.response['set-cookie']}
secondRsp = http.request(request,headers)
puts "THIRD RESPONSE===========\r"
puts secondRsp['location'] #Not right. Should be
home.domain.com but it is simply domain.com.
request = Net::HTTP::Get.new(secondRsp['location'])
headers = {'Cookie' => secondRsp.response['set-cookie']}
thirdRsp = http.request(request,headers)
puts "=======================END\r"
}
 
A

Aaron Patterson

I'm attempting to login and follow redirects, however, the below script
doesn't seem to do it. I arrive back at the main login page. Am I doing
something obviously wrong? Am I passing bad headers or wrong cookies?
See comments below.

Also, please don't tell me to use Mechanize. I'm trying to improve the
documentation of this library.

Which library?
Code ------------------
domain = 'login.domain.com'
script = '/login.cfm'
params = '[email protected]&password=passw4rd'
Net::HTTP.start(domain,80){|http|
loginRsp = http.post2(script,params)
loginRsp.each {|key, val| puts key + ' = ' + val}
puts "FIRST RESPONSE===========\r"
puts loginRsp['location'] #Seems ok => Login2.domain.com
request = Net::HTTP::Get.new(loginRsp['location'])
headers = {'Cookie' => loginRsp.response['set-cookie']}
firstRsp = http.request(request,headers)
puts "SECOND RESPONSE===========\r"
puts firstRsp['location'] #Might be ok. =>
Login.domain.com
request = Net::HTTP::Get.new(firstRsp['location'])
headers = {'Cookie' => firstRsp.response['set-cookie']}
secondRsp = http.request(request,headers)
puts "THIRD RESPONSE===========\r"
puts secondRsp['location'] #Not right. Should be
home.domain.com but it is simply domain.com.
request = Net::HTTP::Get.new(secondRsp['location'])
headers = {'Cookie' => secondRsp.response['set-cookie']}
thirdRsp = http.request(request,headers)
puts "=======================END\r"
}

There are a couple things wrong. First, you are not parsing the cookie
header. You are not supposed to send back the same data you received.
See RFC 2109, and 2965.

Second, you keep reassigning your headers hash. This means that even if
you were sending back a properly formatted cookie header, you would only
be sending back the last cookie you received! The server could be
trying to set multiple cookies on your client, and expects that all of
those cookies be sent back.

Hope the helps!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top