LINUX.ORG.RU

Странности с urllib.request.urlopen

 ,


0

1

Всем привет!

Есть такой код:

#!/usr/bin/python3
# -*- coding: UTF-8 -*-

import time
import urllib.request

url = 'https://www.multitran.com/m.exe?s=working%20documentation&l1=1&l2=2&SHL=2'
start = time.time()

code = urllib.request.urlopen(url,data=None,timeout=6).read()

delta = float(time.time()-start)

mes = 'The operation has taken {} s.'.format(delta)
print(mes)

У меня уже есть готовая программа, которая работает аналогичным образом, и внезапно стали появляться лаги. Выяснилось, что проблема с timeout. Если поставить timeout в 1с, будет завершаться за 1с, 3с - за 3с, 30с - за 21с. До этого timeout работал как ему и положено - отдавал результат максимально быстро, а при таймауте прекращал попытки через timeout секунд. Сейчас же, грубо говоря, сколько timeout поставишь, столько и будешь ждать.

Кто-нибудь знает, в чем дело?


Никогда не делал ничего на питоне, но похожие симптомы могут быть если клиент ставит Connection: close и использует его как маркер конца ответа (так например работает, или по крайне мере работал в 5.х, пхпшный file_get_contents), а сервер его игнорирует и не закрывает коннект (такое тоже случается, особенно если веб-сервер не совсем мейнстримный).

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Python 3.10.1 (main, Dec 18 2021, 23:53:45) [GCC 11.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> import urllib.request
>>> url = 'https://www.multitran.com/m.exe?s=working%20documentation&l1=1&l2=2&SHL=2'
>>> start = time.time()
>>> 
>>> code = urllib.request.urlopen(url,data=None,timeout=6).read()

>>> 
>>> delta = float(time.time()-start)
>>> 
>>> mes = 'The operation has taken {} s.'.format(delta)
>>> print(mes)
The operation has taken 0.5530252456665039 s.
>>> 
urxvt ★★★★★
()
Ответ на: комментарий от firkax

Я в сетях нуб. Как мне такое исправить?

baobab
() автор топика
Ответ на: комментарий от baobab

Нет. Но на московском сервере все то же самое.
Покажи вывод

time curl -v 'https://www.multitran.com/m.exe?s=working%20documentation&l1=1&l2=2&SHL=2'

urxvt ★★★★★
()
Ответ на: комментарий от urxvt

Действительно, 0.5с всего.

time curl -v 'https://www.multitran.com/m.exe?s=working%20documentation&l1=1&l2=2&SHL=2'
*   Trying 89.108.112.70:443...
* Connected to www.multitran.com (89.108.112.70) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: CN=www.multitran.com
*  start date: Feb 21 16:25:50 2022 GMT
*  expire date: May 22 16:25:49 2022 GMT
*  subjectAltName: host "www.multitran.com" matched cert's "www.multitran.com"
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify ok.
> GET /m.exe?s=working%20documentation&l1=1&l2=2&SHL=2 HTTP/1.1
> Host: www.multitran.com
> User-Agent: curl/7.74.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=UTF-8
< Vary: User-Agent
< Server: Microsoft-IIS/8.5
< Strict-Transport-Security: max-age=31536000; includeSubDomains
< Date: Thu, 03 Mar 2022 14:41:16 GMT
< Connection: close
< Content-Length: 14327
< 
<.....................................................>
* Closing connection 0
* TLSv1.2 (OUT), TLS alert, close notify (256):
</html>
real	0m0,563s
user	0m0,045s
sys	0m0,015s

baobab
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.