Maintaining Cookies Between Mechanize Requests

Are cookies kept in a Mechanize browser between opening URLs?

Yes you will have to store the cookie between open requests in mechanize. Something similar to the below should work as you can add the cookiejar to the br object and as long as that object exists it maintains that cookie.

import Cookie
import cookielib
cookiejar =cookielib.LWPCookieJar()

br = mechanize.Browser()
br.set_cookiejar(cookiejar)
br.open("https://mysite.com/")
br.select_form(nr=0)
#do stuff here
response = br.submit()
html = response.read()

#now that i have the login cookie i can do this...
br.open("https://mysite.com/")
html = response.read()

The Docs cover it in more detail.

I use perl mechanize alot, but not python so I may have missed something python specific for this to work, so if I did I apologize, but I did not want to answer with a simple yes.

Remove previously stored cookies from Mechanize

After something like

agent = Mechanize.new
agent.get SOMEURL

you can remove all cookies with agent.cookie_jar.clear!, so the next request of the agent will not send any cookies.

How can I accept and send cookies with Mechanize?

Have you tried res = br.open("https://myapp.url.com/login", data=...) instead of mechanize.Request? Seems you would need to use the browser you created to do the login if you expect it to be able to do the retrieval.

Ruby Mechanize does not pass cookie with request

I ran into the same problem with redirects, where the cookies weren't being saved in the jar after a redirect. I downloaded the latest version of Mechanize from the github repository (version 2.0.2) and the issue seems to be fixed. Not exactly sure what change in the code base fixed this problem, but the cookies now seem to be saving after redirects.

When you are trying this fix, make sure that you're using version 2.0.2 of the gem, and not another locally installed version of the gem. That got me for a while. :)

Rails 3 - Log into another site and keep cookie in session

Don't store the agent, just the session cookie. Find the name of the cookie you want to capture. After logging in, grab it from the Mechanize cookie jar, store it in the session, and make sure it's in the cookie jar before every "API request".

Python - Transferring session between two browsers

Since nobody answered, I will post my work-around.

Basically, wanted to "transfer" my session from Mechanize (the python module) to the QtWebKits QWebView (PyQt4 module) because the vast majority of my project was automated headless, but I had encountered a road block where I had no choice but to have the user manually enter data into a possible resulting page (as the form was different each time depending on circumstances).

Instead of transferring sessions, I met this requirement by utilizing QWebViews javascript functionality. My method went like this:

  1. Load page in Mechanize, and save the downloaded HTML to a local temporary file.
  2. Load this local file in QWebView.
  3. The user can now enter required data into the local copy of this page.
  4. Locate the form fields on this page, and pull the data the user entered using javascript. You can do this by getting the main frame object for the page (QWebView->Page()->MainFrame()), and then evaluating javascript code to accomplish the above task (use evaluateJavaScript()).
  5. Take the data you have extracted from the form fields, and use it to submit the form with the connection you still have open with mechanize.

That's it! A bit of a work-around, but it works none-the-less :\

Managing HTTP Cookies on iPhone

NSURLConnection gives you cookie management for free. From the URL Loading System Programming Guide:

The URL loading system automatically sends any stored cookies appropriate for an NSURLRequest. unless the request specifies not to send cookies. Likewise, cookies returned in an NSURLResponse are accepted in accordance with the current cookie acceptance policy.



Related Topics



Leave a reply



Submit