2014-12-30 131 views
1

我需要通過python腳本 登錄到malwr site我嘗試使用各種模塊,如machanize modulerequest module,但是沒有成功登錄到站點SCRPT。無法通過python腳本登錄到https站點(https://malwr.com)

我想通過解析html頁面來創建自動化腳本來從malware analysis site下載文件,但由於登錄問題,我無法解析html頁面的href屬性來獲取下載文件的鏈接。

下面是我的代碼:

import urllib, urllib2, cookielib 

username = 'myuser' 
password = 'mypassword' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
login_data = urllib.urlencode({'username' : username, 'password' : password}) 
opener.open('https://malwr.com/account/login/', login_data) 
resp = opener.open('https://malwr.com/analysis/MDMxMmY0NjMzNjYyNDIyNDkzZTllOGVkOTc5ZTQ5NWU/') 
print resp.read() 

我在做財產以後錯了嗎?

回答

2

做的關鍵是要分析從形式csrf令牌,並與usernamepassword在POST參數一起傳遞給https://malwr.com/account/login/端點。

以下是使用requestsBeautifulSoup庫的解決方案。

首先,它打開一個會話來維護cookie,以便通過網絡抓取會話「保持登錄狀態」,然後從登錄頁面獲取csrf令牌。下一步是發送POST請求登錄之後,你可以打開「分析」頁面和檢索鏈接:

from urlparse import urljoin 
from bs4 import BeautifulSoup 
import requests 

base_url = 'https://malwr.com/' 
url = 'https://malwr.com/account/login/' 
username = 'username' 
password = 'password' 

session = requests.Session() 

# getting csrf value 
response = session.get(url) 
soup = BeautifulSoup(response.content) 

form = soup.form 
csrf = form.find('input', attrs={'name': 'csrfmiddlewaretoken'}).get('value') 

# logging in 
data = { 
    'username': username, 
    'password': password, 
    'csrfmiddlewaretoken': csrf 
} 
session.post(url, data=data) 

# getting analysis data 
response = session.get('https://malwr.com/analysis/MDMxMmY0NjMzNjYyNDIyNDkzZTllOGVkOTc5ZTQ5NWU/') 
soup = BeautifulSoup(response.content) 

link = soup.find('section', id='file').find('table')('tr')[-1].a.get('href') 
link = urljoin(base_url, link) 
print link 

打印:

https://malwr.com/analysis/file/MDMxMmY0NjMzNjYyNDIyNDkzZTllOGVkOTc5ZTQ5NWU/sample/7fe8157c0aa251b37713cf2dc0213a3ca99551e41fb9741598eb75c294d1537c/ 
+0

感謝@alecxe,我缺少找到crftoken – Rajendra

+0

我想通過urlopen()下載輸出鏈接,但是顯示錯誤訪問被禁止。看起來像下載文件之前會話過期。任何suggession如何使用同一會話從上面的鏈接下載文件 – Rajendra

+0

@Rajendra你需要使用相同的會話下載文件,使用這裏提供的答案(s)http:// stackoverflow。 COM /問題/ 16694907 /如何對下載大文件中的Python與 - 請求-PY。讓我知道你是否有困難。謝謝。 – alecxe