我试着用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")Bat不工作,给我正常的登录网页,请任何人可以说我哪里错了。
发布于 2013-03-16 03:41:04
先读“但是”吧!
您需要获得正确的URL参数(我认为您的URL是错误的):
POST to http://www.example.com/administrator/
带有以下参数的:
从我对Joomla的了解来看,是!认证,你不能这样做,因为Joomla!将从web浏览器发送一个令牌,以确保表单是从浏览器发布的。
如果它不是从浏览器发布的,则会出现类似“最近的请求被拒绝,因为它包含无效的安全令牌。请刷新页面并重试”这样的错误。
我知道远程登录Joomla是可能的,只要继续搜索就行了。您可能需要一个自定义身份验证插件。
发布于 2019-03-25 17:29:40
我需要做同样的事情,并且我已经设法做到了。我们需要做以下工作:
HTTP打开登录页面,并接受returned.
导入输入导入请求导入urllib,urllib2,cookielib jar =cookielib.FileCookieJar(“cookie”) bs4 = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar)) r=opener.open(“插入登录页面URL").read() soup=bs4.BeautifulSoup(r,"html.parser") hidden_tags = soup.find_all("input",Type=“隐藏”)#获取随机令牌-这是表单token_name = hidden_tags4 token_val= hidden_tags4 login_data ={‘用户名’:‘插入用户名’,‘密码’:‘插入密码’,‘记住’:‘是’,token_name: token_val} }#尝试登录opener.open(“登录页面表单操作”,urllib.urlencode(login_data)) #现在打开您想要的登录页面logged_response =opener.open(“受登录保护的页面”) logged_result = logged_response.read() print logged_result
发布于 2021-04-29 20:29:39
对于任何在Python 3中寻找解决方案的人,我在这里发布我的解决方案:
它使用requests包,并检查登录操作后是否返回了正确的set-Cookie头。
import re
import requests
session = requests.Session()
response = session.get("[INSERT LOGIN PAGE URL]")
hidden_tags = re.findall(r'<input.+type="hidden".+>', response.text)
# Get the randomized token - which is the 6th hidden field in the form
token_name = re.findall(r'name="(\S+)"', hidden_tags[5])[0]
token_val = re.findall(r'value="(\S+)"', hidden_tags[5])[0]
login_data = {
"username": '[INSERT USERNAME]',
"password": '[INSERT PASSWORD]',
"remember": "yes",
"return": "",
token_name: token_val,
}
login_response = session.post("[LOGIN PAGE FORM ACTION]", data=login_data, allow_redirects=False)
login_cookie = login_response.headers.get('set-cookie', "")
print("joomla_user_state=logged_in" in login_cookie)https://stackoverflow.com/questions/15439760
复制相似问题