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

**URL:** <https://www.ruby-forum.com/t/net-http-cookies-headers-almost-there/106179>\
**Category:** Ruby\
**Created:** [June 7, 2007, 5:42am UTC](https://www.ruby-forum.com/t/net-http-cookies-headers-almost-there/106179 "2007-06-07T05:42:34Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![yeago](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/eada6e/32.png) [@yeago](https://www.ruby-forum.com/u/yeago)\
**Post date:** [June 7, 2007, 5:42am UTC](https://www.ruby-forum.com/t/net-http-cookies-headers-almost-there/106179/1 "2007-06-07T05:42:34Z")

</div>

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](http://login.domain.com)’  
script = ‘/login.cfm’  
params = ‘email=removed\_email\_address@domain.invalid&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](http://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](http://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](http://home.domain.com) but it is simply [domain.com](http://domain.com).  
request = Net::HTTP::Get.new(secondRsp[‘location’])  
headers = {‘Cookie’ =\> secondRsp.response[‘set-cookie’]}  
thirdRsp = http.request(request,headers)  
puts “=======================END\r”  
}

---

<div class="post-metadata">

**Author:** ![yeago](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/eada6e/32.png) [@yeago](https://www.ruby-forum.com/u/yeago)\
**Post date:** [June 7, 2007, 6:46am UTC](https://www.ruby-forum.com/t/net-http-cookies-headers-almost-there/106179/2 "2007-06-07T06:46:15Z")

</div>

On Thu, Jun 07, 2007 at 12:42:45PM +0900, Sy Ys wrote:

> 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?

> ```
> request = Net::HTTP::Get.new(loginRsp['location'])
> 
> ```
> 
> [home.domain.com](http://home.domain.com) but it is simply [domain.com](http://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!
