Nano Hash - криптовалюты, майнинг, программирование

Странное поведение с urllib.request.urlopen в Ubuntu 18.04

Я работал через онлайн-класс по 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). Любые идеи были бы хорошы.

20.04.2019

Ответы:


1

Ответил (думаю) на свой вопрос. Похоже, веб-сайт не любит розетки IP6. Удалось отследить зависание до socket.py. Первый адрес, используемый при создании соединения, представляет собой IP6-адрес и порт, который ничего не возвращает. Добавление тайм-аута заставило код выбрать следующий адрес и порт из списка, который был IP4, и это сработало. На данный момент я отключил IP6 в Ubuntu 18.04, чтобы принудительно использовать IP4.

22.04.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..