2012-05-30 112 views
1

我有通過post請求驗證的簡單代碼。 服務器的每個請求都會產生 「javax.faces.ViewState」 變量 像javax.faces.ViewState = 123456784356754python和函數參數

import requests 
import re 


global_headers = { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0', 
        'Accept': 'application/xml, text/xml, */*; q=0.01', 
        'Referer': 'http://serrver.com/login/'} 

req = requests.Session(headers=global_headers) 

def javalue_parser(): 
     javalue = re.findall(r'name="javax.faces.ViewState" id="javax.faces.ViewState" value="(.*?)"') 
     print javalue[0] 
     return javalue 



my_post_req = req.post('http://server.com/login/', 
       data={'phone': '+11(123)456-78-91', 
         'loginForm': 'loginForm', 
         'javax.faces.ViewState': "%s" % javalue_parser() 
         }) 

我總是有錯誤

Traceback (most recent call last): 
    File "rework_sms.py", line 28, in <module> 
    'javax.faces.ViewState': "%s" % javalue_parser() 
    File "test.py", line 19, in javalue_parser 
    javalue = re.findall(r'name="javax.faces.ViewState" id="javax.faces.ViewState" value="(.*?)"') 
TypeError: findall() takes at least 2 arguments (1 given) 

的說法需要什麼樣的?

+1

*你想用*找到正則表達式*?這是另一個說法。 – kennytm

+0

有些數字像12344556,但我不能執行功能發佈請求 如果我使用javalue_parser(my_post_req.content)它工作正常 – Alexander

回答

1

參見re.findall

re.findall的文檔(圖案,,標誌= 0)
返回所有非重疊圖案的匹配字符串,作爲 列表字符串。 將字符串從左到右掃描,匹配返回 的順序找到。如果該模式中存在一個或多個組,則 會返回組列表;如果模式 有多個組,這將是元組列表。空結果包含在結果 中,除非它們觸及另一場比賽的開始。