簡體   English   中英

pycurl 登錄 joomla 網站

[英]pycurl login joomla website

我嘗試為登錄 joomla 網站創建小腳本 whit python pycurl,我寫了這個代碼:

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/

具有以下參數:

  • 選項=com_login
  • 任務=登錄
  • 用戶名=您的用戶(不是用戶名!正如您所擁有的)
  • 密碼

但是根據我對 Joomla 的了解! 認證,你不能這樣做,因為 Joomla! 從 web 瀏覽器將發送一個令牌,以確保表單是從瀏覽器發布的。

如果它不是從瀏覽器發布的,則會出現類似“最近的請求被拒絕,因為它包含無效的安全令牌”之類的錯誤。 請刷新頁面並重試。

我知道可以遠程登錄 Joomla!,請繼續搜索。 您可能需要自定義身份驗證插件。

我需要同樣的東西,我已經設法做到了。 我們需要做以下事情:

  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

對於在 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM