From: Shawn Anderson Date: 2008-04-04T09:53:25+09:00 Subject: Re: Seeking some guidance with net/http ------=_Part_266_28469932.1207270401193 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline You may want to check out: http://youtube-g.rubyforge.org/ at least see how they manage the authentication aspect. /Shawn On Thu, Apr 3, 2008 at 5:48 PM, Andrew Cowan wrote: > Heya, I am attempting to write a script that lets me login to my Youtube > account to gather frequent data for the videos I have uploaded, I am > stumbling over the Youtube login procedure which seems to involve both > cookies and session info. I am able to get this login procedure to work with > Perl and LWP::UserAgent but so far using net/http and Ruby I am failing. > > Here is the code I have been playing with which involves first a POST form > submission to youtube's /login script, then the code to follow the > redirection back to the /index page -- but looking at the contents returned > from /index it appears youtube doesn't recognize me as being logged in: > > --- > > # Note: I have added a bunch of puts statements to help debug, leaving > them here for this post > require 'net/http' > > http = Net::HTTP.new( 'www.youtube.com', 80 ) > path = '/login' > agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) > Gecko/20060111 Firefox/1.5.0.1' > > data = > 'nexturl=/¤t_form=loginForm&action_login=Log+In&username=MY_USER&password=MY_PWD' > > headers = { > 'Referer' => 'http://www.youtube.com/', > 'Content-Type' => 'application/x-www-form-urlencoded', > 'User-Agent' => agent > } > > resp, data = http.post( path, data, headers ) > cookie = resp.response['set-cookie'] > > if ( resp.code =~ /^3/ ) > puts "Got Redirect: " + resp['location'] > end > > next_loc = resp['location'] > > puts 'Logging In to Set Cookies:' > puts 'Code=' + resp.code > puts 'Mesg=' + resp.message > puts 'Cookie=' + cookie > puts 'Next Location=' + next_loc > puts 'Data=' + data > > > headers = { > 'Cookie' => cookie, > 'User-Agent' => agent > } > > resp, data = http.get( next_loc, headers ) > > puts '(should be) Logged In:' > puts 'Code=' + resp.code > puts 'Mesg=' + resp.message > puts 'Data=' + data > > --- > > I am unsure what part I am missing which youtube apparently needs to > complete its login procedure, I would greatly appreciate any helpful > suggestions! > > Thanks, > Andy > > ------=_Part_266_28469932.1207270401193--