Python使用Cookie登录并保留登录

时间:2012-10-27 01:03:49

标签: python login

我在http://www.domaintools.com/research/reverse-ip/有一个帐户。我查看了他们的ajax搜索并尝试执行python查找,如下所示:

req = urllib2.Request('http://www.domaintools.com/research/reverse-ip?    ajax=mReverseIP&call=getIPResults&args[0]=64.233.161.104+"&args[1]=20')
import base64
base64string = base64.encodestring('%s:%s' % ('USERNAME', 'PASSWORD'))[:-1]
authheader =  "Basic %s" % base64string
req.add_header("Authorization", authheader)
conn = urllib2.urlopen(req,timeout=5)

但我回来了,“请登录”。所以我假设他们不支持Basic Auth。

然后我尝试了

req = urllib2.Request('https://secure.domaintools.com/log-in/?r=http%3A%2F%2Fwww.domaintools.com%2Fresearch%2Freverse-ip%2F')
import base64
base64string = base64.encodestring('%s:%s' % ('USERNAME', 'PASSWORD'))[:-1]
authheader =  "Basic %s" % base64string
req.add_header("Authorization", authheader)
conn = urllib2.urlopen(req,timeout=5)

但是我得到了一个需要cookie的错误。

所以我的问题是:如果我设法将cookie添加到第二个代码示例,我该如何使用该请求进行查找?有人可以为此提供代码示例吗?

谢谢,

萨姆

编辑:我搜索了一些,找到了机械化库。有人可以建议如何使用它来发出Ajax请求吗?

我现在已经走到了这一步:

import mechanize
browser = mechanize.Browser() 
browser.set_handle_robots(False)
browser.open('https://secure.domaintools.com/log-in/?r=http%3A%2F%2Fwww.domaintools.com%2Fresearch%2Freverse-ip%2F')
browser.select_form(nr=0)

browser["username"] = 'username'
browser["password"] = 'pass'
browser.new_control("HIDDEN", "action", {})
control = browser.form.find_control("action")
control.readonly = False
browser["action"] = "login"
browser.method = "POST"
browser.action = "#"

response = browser.submit()

现在是什么?

1 个答案:

答案 0 :(得分:0)

很难:

  • 研究该页面是如何工作的,如何提交表单,可以是简单的形式与cookie或可能是一个AJAX调用,然后使用一些库复制

更简单的方式:

  • 浏览器已经为您完成了所有这些,您希望自动化,使用像phantomjs这样的无头浏览器,我认为这对您来说已经足够了。我已经用它来自动执行许多我曾经用斜纹/机械化做的任务,但由于页面变得越来越复杂,因为许多AJAX调用和引擎盖交互都变得不成功。例如请参阅find pizaa using yelp示例,看看它有多容易

您可以将phantomjs作为单独的过程启动,例如使用子进程模块并读取stdout,如果你每次都需要避免打开进程,你可以有一个单独的进程来保持长时间运行的phantomjs用于此目的。