Ryan, thanks for the pointer to the KB article. I suppose I wasn't following the HTTP spec since I wasn't doing anything with the cookie at first. I'm definitely new to the world of raw HTTP. I'll know better next time.
> The only case where I've seen redirects as you describe was the result of > sending conflicting values -- IE a request was sent with a cookie specifying > a session id of ABC, but the gsessionid URL param specified a value of DEF > (for instance). There was a bug in the cookie handling of the Java client > library which caused this type of redirect loop if the session ID was > changed (primarily due to requesting a calendar meta-feed)-- it has since > been resolved. > > If the case you found is different, please let me know and we'll work on > resolving it. I found this to be different. It doesn't look like the gsessionid in the URL does anything. I checked the value of the 'S' cookie against the gsessionid and they're the same. I know the KB article says that I can send one or the other (or both), but only sending the 'S' cookie value made any difference. I'd be surprised if it was feed-specific, but here's the feed I was requesting: https://www.google.com/calendar/feeds/<account> Here's the snippet of Ruby that I'm using to handle the redirect (still very raw): =============== def fetchFeed(url, authToken, cookie=nil) # set up the HTTPS connection https = createHTTPSConnection(url) # add the authorization token we got from ClientLogin # to the headers headers = { "Authorization" => "GoogleLogin auth=#{authToken}"} # sometimes we need to shove a session cookie in there # when we get HTTP 302 redirects headers["Cookie"]= cookie unless cookie == nil return http.get(url.path, headers) end def checkResponse(res, attempts=1) # Experience shows that this could easily go into an # infinite loop of redirects. Bail after 5 tries. raise "Too many connection attempts" unless attempts <= 5 case res when Net::HTTPOK # .: Success :. return res when Net::HTTPFound # .: Temporary Redirect :. # Grab the location URL and session cookie (if any) temp_loc = res.fetch("location") cookie = res.fetch("set-cookie") url = URI.parse(temp_loc) return checkResponse(fetchFeed(url, @auth.authToken, cookie), attempts+1) else ... =============== If I comment out the line: headers["Cookie"]= cookie unless cookie == nil in fetchFeed() above, it just does an infinite loop. The 302 response gives a new session ID on each call. Using: Ruby 1.8.5 OS X 10.4.8 (intel) Hope I'm not smoking crack... Let me know if I can provide any more info. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Calendar Data API" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/google-calendar-help-dataapi?hl=en -~----------~----~----~----~------~----~------~--~---
