2017-04-18 79 views
-3

我使用TREQ在Python 2.7這個腳本,但它並沒有發出請求:爲什麼不是我的Python 2.7腳本工作?

from twisted.internet import reactor 
import time,hashlib,urllib2,json,treq 

PasswordStart = 0 
executed = [] 

def done(response): 
    if response.code == 200: 
     sys.stdout.write(Password) 
    reactor.stop() 
while PasswordStart<10001:  
    if PasswordStart not in executed and PasswordStart<10001: 
     executed.append(PasswordStart) 
     UserAgent = "Samsung Galaxy S8 - 7.0.0" 
     Username = "JamesRicky" 
     RegD = time.strftime("%Y-%m-%d") 
     Password = str(PasswordStart).zfill(4) 
     HASH = hashlib.md5() 
     HASH.update(time.strftime("%Y-%m-%d")+Password) 
     url = "http://example.com/info" 
     data = {'Password': Password, 'RegDate': RegD, 'UserName': Username} 
     headers = {'Content-type': 'application/json', 'Accept-encoding': 'gzip, deflate', 'Accept': '*/*', 'Reg-Date': RegD, 'User-Agent': UserAgent, 'Secret-Key': HASH.hexdigest()} 
     d = treq.post(url, data=json.dumps(data), headers=headers) 
     d.addCallback(done) 
     PasswordStart+=1 

reactor.run() 

爲什麼它不工作?

我的代碼應該做的是運行這個Post Request,每個請求應該有一個4位密碼(0000 ... 9999)。每次循環運行:

如果不執行PasswordStart和PasswordStart < 10001:

它應該加上執行數組中的環數(PasswordStart),所以它不會重新運行相同的數字兩次。然後它將製作變量,然後進行連接。它保存了響應,並在最後檢查響應。如果response.code == 200,那麼它會打印出密碼。否則,它將繼續循環並添加i + 1和PasswordStart + 1。

爲什麼不能正常工作?

+0

您是否收到任何錯誤消息?你有沒有做過什麼事來縮小問題出在哪裏? – Chris

+3

你有沒有看看[我可以問什麼問題?](https://stackoverflow.com/help/on-topic) - 它說_「尋求調試的幫助幫助(」爲什麼不是這個代碼工作?「)必須包含所需的行爲,特定的問題或錯誤,以及在問題本身中重現問題所需的最短代碼;沒有明確問題陳述的問題對其他讀者無效;請參閱:如何創建最小,完整,和可驗證示例。「_ – Clijsters

+0

使用打印語句。 – Elan

回答

0

正如我所看到的,你正在停止反應堆在done函數。一旦收到第一個響應,你的反應堆就會停止。即使有未決的回調,停止反應器也會停止腳本。你需要即興發揮你的邏輯,看看是否所有的請求都完成了,然後停止反應堆。

treq是基於扭曲的。看看這個documentation瞭解事件循環/反應器的更多知識

相關問題