pycurl登录joomla网站

问题描述 投票:2回答:2

我尝试使用python pycurl为登录joomla网站创建小脚本,我写了这段代码:

import sys, re
import pycurl
import cStringIO
import time
import urllib

def LoginJoomla(url):
    buf = cStringIO.StringIO()
    c = pycurl.Curl()
    c.setopt(c.URL, url)
    post_params = [('usrname','admin'),('passwd','1234567789'),('submit','Login')]
    resp_data = urllib.urlencode(post_params)
    c.setopt(c.POSTFIELDS, resp_data)
    c.setopt(pycurl.POST, 1)
    c.setopt(c.WRITEFUNCTION, buf.write)
    c.perform()
    html = buf.getvalue()
    buf.close()
    print html

LoginJoomla("http://www.domain.com/administrator/index.php?option=com_user&view=login")

蝙蝠不工作,给我正常的登录网页,请任何人都可以说我错在哪里。

python pycurl
2个回答
2
投票

首先阅读BUT!

你需要正确获取URL参数(我认为你的URL很糟糕):

POST to http://www.example.com/administrator/

使用以下参数:

  • 选项= com_login
  • 任务=登录
  • 用户名= YOURUSER(不是usrname!就像你有的那样)
  • passwd文件

但是我对Joomla的了解!身份验证,你不能这样做,因为Joomla!从Web浏览器将发送一个令牌,以确保从浏览器发布表单。

如果它没有从浏览器发布,则会出现“最近的请求被拒绝,因为它包含无效的安全令牌”之类的错误。请刷新页面然后重试。

我知道可以远程登录Joomla!,继续搜索。您可能需要自定义身份验证插件。


0
投票

我需要同样的东西,我设法做到了。我们需要做以下事情:

  1. 打开登录页面,并接受所有返回的cookie。
  2. 解析html页面并获取随机标记 - 隐藏输入字段。
  3. 使用所有字段和cookie将HTTP POST发送到登录处理脚本。 import bs4 import requests import urllib, urllib2, cookielib jar = cookielib.FileCookieJar("cookies") opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar)) r = opener.open("[INSERT LOGIN PAGE URL]").read() soup=bs4.BeautifulSoup(r, "html.parser") hidden_tags = soup.find_all("input", type="hidden") # Get the randomized token - which is the 5th hidden field in the form token_name = hidden_tags[4]['name'] token_val= hidden_tags[4]['value'] login_data = {'username':'[INSERT USERNAME]', 'password':'[INSERT PASSWORD]', 'remember':'yes', token_name: token_val} # Attempt login opener.open("[LOGIN PAGE FORM ACTION]", urllib.urlencode(login_data)) # Now open logged-in page you wish logged_response = opener.open("[LOGIN PROTECTED PAGE]") logged_result = logged_response.read() print logged_result
© www.soinside.com 2019 - 2024. All rights reserved.