Я работал через онлайн-класс по python с Coursera (это не домашнее задание), и у меня возникла проблема с urllib.request.urlopen для некоторых URL-адресов. Для URL-адреса, жестко запрограммированного в приведенном ниже коде, время ожидания команды urllib.request.urlopen(serviceurl, context=ctx).read().decode() истекает. Если используется другой URL-адрес... скажем, используется http://www.woot.com, данные возвращаются.
Я пробовал это на двух разных машинах с Ubuntu в моем офисе, на обеих версиях 18.04 (по умолчанию 3.6.7) и 3.7.3 через Anaconda. Я даже переустанавливал Ubuntu с теми же результатами.
Как ни странно, если я включаю параметр времени ожидания (например, urllib.request.urlopen(serviceurl, timeout=1, context=ctx).read().decode()), данные возвращаются.
Кроме того, эта программа успешно работает (независимо от URL-адреса) без параметра тайм-аута на MacBook Air с версией 3.6.4.
import urllib.request
import ssl
# Ignore SSL certificate errors
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
address = input('Enter Locaton: ')
if len(address) < 1:
serviceurl = 'http://py4e-data.dr-chuck.net/comments_42.xml?'
else:
serviceurl = address
s = urllib.request.urlopen(serviceurl, context=ctx).read().decode()
print(s)
Кажется, я единственный, у кого есть эта проблема, и она поставила меня в тупик. Я только начинаю знакомиться с python (более знакомы C, C#, Java). Любые идеи были бы хорошы.