我尝试使用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")
蝙蝠不工作,给我正常的登录网页,请任何人都可以说我错在哪里。
首先阅读BUT!
你需要正确获取URL参数(我认为你的URL很糟糕):
POST to http://www.example.com/administrator/
使用以下参数:
但是我对Joomla的了解!身份验证,你不能这样做,因为Joomla!从Web浏览器将发送一个令牌,以确保从浏览器发布表单。
如果它没有从浏览器发布,则会出现“最近的请求被拒绝,因为它包含无效的安全令牌”之类的错误。请刷新页面然后重试。
我知道可以远程登录Joomla!,继续搜索。您可能需要自定义身份验证插件。
我需要同样的东西,我设法做到了。我们需要做以下事情:
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