2015-10-08 42 views
0

我必須做出一系列請求我的LocalServer和檢查響應。基本上我試圖通過暴力強制打正確的網址。這是我的代碼:正確編碼URL中的urllib2的Python

for i in range(48,126): 
    test = chr(i) 
    urln = '012a4' + test 
    url = {"tk" : urln} 
    data = urllib.urlencode(url) 
    print data 
    request = urllib2.Request("http://127.0.0.1/brute.php", data) 
    response = urllib2.urlopen(request) 
    status_code = response.getcode() 

我已經做出要求,如:http://127.0.0.1/brute.php?tk=some_val 我得到一個錯誤,因爲URL不能準確編碼。即使系列中的某個URL應該給200,我也是內部服務器錯誤500.手動給出該URL確認它。另外,什麼是正確的方法來跳過500/400錯誤,直到我得到200?

+1

是你想要做什麼,或者'測試= CHR(我)'(引號去掉)'測試= 'CHR(我)''? – kmad1729

回答

0

這聽起來像是你將受益於一個try/except塊:

for i in range(48,126): 
    test = 'chr(i)' 
    new urln = '012a4' + test 
    url = {"tk" : urln} 
    data = urllib.urlencode(url) 
    print data 
    request = urllib2.Request("http://127.0.0.1/brute.php", data) 
    try: 
     response = urllib2.urlopen(request) 
    except: 
     status_code = response.getcode()**strong text** 
    print status_code 

您通常也想捕獲錯誤,以及:

except Exception, e: 
    print e 

或者只捕獲特定的錯誤,例如:

except ValueError: 
    #do stuff 

雖然你不會在你的鱈魚中得到ValueError

0

當使用urllib2你應該總是處理時引發任何異常,如下所示:

import urllib, urllib2 

for i in range(0x012a40, 0x12a8e): 
    url = {"tk" : '{:x}'.format(i)} 
    data = urllib.urlencode(url) 
    print data 

    try: 
     request = urllib2.Request("http://127.0.0.1/brute.php", data) 
     response = urllib2.urlopen(request) 
     status_code = response.getcode() 
    except urllib2.URLError, e: 
     print e.reason 

這將顯示以下連接失敗時,再繼續嘗試下連接:

[Errno 10061] No connection could be made because the target machine actively refused it 

e.reason會給你文字的原因,並e.errno會給你的錯誤代碼。所以,你仍然可以停止,如果誤差比10061例如其他的東西。

最後,你似乎通過一系列十六進制格式的數字可以騎自行車嗎?您可能會發現更容易與0x格式直接合作,以建立您的字符串。