首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pycurl登录joomla网站

pycurl登录joomla网站
EN

Stack Overflow用户
提问于 2013-03-16 02:34:09
回答 3查看 851关注 0票数 2

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

代码语言:javascript
复制
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不工作,给我正常的登录网页,请任何人可以说我哪里错了。

EN

回答 3

Stack Overflow用户

发布于 2013-03-16 03:41:04

先读“但是”吧!

您需要获得正确的URL参数(我认为您的URL是错误的):

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

带有以下参数的

  • option=com_login
  • task=login
  • username=YOURUSER (不是用户名!正如你的have)
  • passwd

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

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

我知道远程登录Joomla是可能的,只要继续搜索就行了。您可能需要一个自定义身份验证插件。

票数 2
EN

Stack Overflow用户

发布于 2019-03-25 17:29:40

我需要做同样的事情,并且我已经设法做到了。我们需要做以下工作:

HTTP打开登录页面,并接受returned.

  • Parse
  1. 页面的所有cookies并获取随机的标记隐藏输入字段。
  2. 向登录处理脚本发送包含所有字段和cookies的HTTP POST。

导入输入导入请求导入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

票数 0
EN

Stack Overflow用户

发布于 2021-04-29 20:29:39

对于任何在Python 3中寻找解决方案的人,我在这里发布我的解决方案:

它使用requests包,并检查登录操作后是否返回了正确的set-Cookie头。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15439760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档