pycurl脚本无法登录网站

时间:2010-06-16 21:21:22

标签: python pycurl

我目前正试图掌握pycurl。我正在尝试登录网站。登录到站点后,它应该重定向到主页面。但是,在尝试此脚本时,它只会返回到登录页面。我可能做错了什么?

import pycurl
import urllib
import StringIO

pf = {'username' : 'user', 'password' : 'pass' }
fields = urllib.urlencode(pf)
pageContents = StringIO.StringIO()

p = pycurl.Curl()
p.setopt(pycurl.FOLLOWLOCATION, 1)
p.setopt(pycurl.COOKIEFILE, './cookie_test.txt')
p.setopt(pycurl.COOKIEJAR, './cookie_test.txt')
p.setopt(pycurl.POST, 1)
p.setopt(pycurl.POSTFIELDS, fields)
p.setopt(pycurl.WRITEFUNCTION, pageContents.write)
p.setopt(pycurl.URL, 'http://localhost')
p.perform()

pageContents.seek(0)
print pageContents.readlines()
编辑:正如彼得所指出的,URL应该指向一个登录URL,但是我试图让它工作的网站无法向我显示这将是什么URL。表单的操作只指向主页(/index.html)

1 个答案:

答案 0 :(得分:3)

在您解决此问题时,我建议您使用FireBug或LiveHTTPHeaders之类的浏览器插件(我建议使用Firefox插件,但其他浏览器也有相似的插件)。然后,您可以对站点执行请求,并查看将哪些操作(URL),方法和表单参数传递到目标服务器。这可能有助于阐明问题的关键。

如果没有帮助,您可以考虑使用不同的工具进行机械化。我使用ClientFormBeautifulSoup来执行类似的操作。基于我在pycURL文档和上面的代码中所读到的内容,ClientForm可能是一个更好的工具。 ClientForm将解析您的HTML页面,在其上找到表单(包括登录表单),并根据您提供给表单的答案为您构建相应的请求。您甚至可以将ClientForm与pycURL一起使用...但至少ClientForm会为您提供POST的相应操作,并构建所有适当的参数。

请注意,如果有JavaScript处理登录表单的任何必要部分,即使ClientForm也无法帮助您。您将需要一些解释JavaScript的东西来有效地自动化登录。在这种情况下,我使用SeleniumRC来控制浏览器(我让浏览器处理JavaScript)。

相关问题