2015-10-08 47 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格式直接合作,以建立您的字符串。