Получение времени разрешения DNS и времени отклика с помощью Python

Предоставляет ли PycURL или любой другой пакет Python информацию о:

  • искать
  • время соединения

Я хотел бы получить ту же информацию, что и эта команда cURL (без вызова команды с использованием подпроцесса):

Команда

curl -s -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' -o /dev/null http://stackoverflow.com/

Выход:

Lookup time:    0.029
Connect time:   0.144
PreXfer time:   0.144
StartXfer time: 0.263

Total time: 0.803

person 4m1nh4j1    schedule 12.06.2015    source источник
comment
Вы просто ищете способы реализовать это? Вы хотите написать инструмент? Вам нужна библиотека, которая может помочь реализовать это?   -  person James Mills    schedule 12.06.2015
comment
В основном я ищу библиотеку, обеспечивающую эти показатели. Или пример реализации с использованием PycURL   -  person 4m1nh4j1    schedule 12.06.2015


Ответы (1)


Да, PyCurl предоставляет информацию. Вы можете получить информацию, используя pycurl. Это может дать много деталей, не только те, которые вы упомянули.

Вот пример кода, который можно использовать для получения той же информации:

import pycurl
from io import BytesIO

buffer = BytesIO()
c = pycurl.Curl()
c.setopt(c.URL, 'http://stackoverflow.com/')
c.setopt(c.WRITEDATA, buffer)
c.perform()
body = buffer.getvalue()

print('TOTAL_TIME: %f' % c.getinfo(c.TOTAL_TIME))
print('CONNECT_TIME: %f' % c.getinfo(c.CONNECT_TIME))
print('PRETRANSFER_TIME: %f' % c.getinfo(c.PRETRANSFER_TIME))
print('STARTTRANSFER_TIME: %f' % c.getinfo(c.STARTTRANSFER_TIME))

c.close()

Это дает следующие результаты:

TOTAL_TIME: 2.252639
CONNECT_TIME: 0.331571
PRETRANSFER_TIME: 0.331634
STARTTRANSFER_TIME: 0.638206

Я нашел ссылку на GitHub, в которой также упоминаются некоторые другие флаги, которые можно использовать в вашем коде. Вот флаги для быстрого просмотра:

* EFFECTIVE_URL
* HTTP_CODE
* TOTAL_TIME
* NAMELOOKUP_TIME
* CONNECT_TIME
* PRETRANSFER_TIME
* REDIRECT_TIME
* REDIRECT_COUNT
* SIZE_UPLOAD
* SIZE_DOWNLOAD
* SPEED_UPLOAD
* HEADER_SIZE
* REQUEST_SIZE
* CONTENT_LENGTH_DOWNLOAD
* CONTENT_LENGTH_UPLOAD
* CONTENT_TYPE
* RESPONSE_CODE
* SPEED_DOWNLOAD
* SSL_VERIFYRESULT
* INFO_FILETIME
* STARTTRANSFER_TIME
* REDIRECT_TIME
* REDIRECT_COUNT
* HTTP_CONNECTCODE
* HTTPAUTH_AVAIL
* PROXYAUTH_AVAIL
* OS_ERRNO
* NUM_CONNECTS
* SSL_ENGINES
* INFO_COOKIELIST
* LASTSOCKET
* FTP_ENTRY_PATH
person Community    schedule 12.06.2015
comment
Отличный список спасибо. Я думаю: HTTP_CODE и RESPONSE_CODE одинаковы. - person 4m1nh4j1; 12.06.2015
comment
Возможно, вам захочется узнать, к чему относится каждый из этих параметров, если вы выполните libcurl curl_easy_getinfo - это место, куда можно пойти, с оговоркой, что в pycurl префикс CURLINFO_ был удален в соответствии с официальным документ PyCurl - person Jaime Gago; 09.06.2017