如何使用Mechanize接受和发送cookie?

时间:2012-08-27 16:42:53

标签: python bash cookies mechanize wget

我有一个bash脚本,使用cookie登录并从URL保存文本文件。我需要在使用Mechanize的Python中实现相同的功能,但我无法使其正常工作。它只有两行bash,它让我发疯。我查看了Mechanize文档,但无法找到如何做到这一点。

#!/bin/sh
base_url=https://myapp.url.com
sign_on_request="aK8Rj_mrVk3J-PDf9x6...LONG KEY...4ZPMd0w"
# Login
wget -q --keep-session-cookies --save-cookies savedcookie.txt --post-data="sign_on_request=$sign_on_request" -O - $base_url/login > /dev/null 2>&1
# Save CSV
wget -q --load-cookies savedcookie.txt -O output.txt $base_url/data

这是我试过的:

import mechanize
import cookielib

# Browser
br = mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Login
req = mechanize.Request("https://myapp.url.com/login", "sign_on_request=aK8Rj_mrVk3J-PDf9x6...LONG KEY...4ZPMd0w")
cj.add_cookie_header(req)
res = mechanize.urlopen(req)

# Download
f = br.retrieve('https://myapp.url.com/data')[0]
print f

2 个答案:

答案 0 :(得分:1)

您是否尝试过res = br.open("https://myapp.url.com/login", data=...)代替mechanize.Request?似乎您需要使用您创建的浏览器进行登录,如果您希望它能够进行检索。

答案 1 :(得分:0)

您可以使用br.set_cookie("cookiename=cookievalue; expire=Wednesday, 13-Feb-13 15:00:00 GMT")但此方法仅在您调用某个网站后才有效。使用相同的对象br来调用其他页面,以便在br.open()方法中自动发送此cookie。