У меня есть скрипт, который каждую неделю вычищает новые главы из определенного романа на ncode.syosetu.com, мне нужен текст для tts, но на прошлой неделе я вдруг начал получать от него ошибку при запуске.
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='ncode.syosetu.com', port=443): Max retries exceeded with url: /n6371es/ (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f21b8d64f28>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution',))
Я могу получить доступ к сайту в Chrome, но ping и tracert получают «Время ожидания запроса истекло», tracert получает первые 9 или около того переходов, но затем для остальных он получает только «Время ожидания запроса истекло».
Я также пытался использовать https://www.site24x7.com/ping-test.html для проверки связи с сайтом, и только один раз он получил ответ по местоположению Йоханнесбург - ZA.
Я попытался добавить User-Agent к вызову request.get в заголовке, но это не помогло. Я также пробовал разные места VPN, отключал VPN и приостанавливал работу брандмауэра, но ничего не помогло.
Я не знаю, связано ли это, но недавно у меня была проблема с подключением к Интернету, но все, что я сделал, чтобы исправить это, это отключить, затем включить мой Ethernet в сетевых подключениях, а затем удалить и переустановить мой VPN.
Я читал о /etc/resolv.conf, но я предполагаю, что это не повлияет на способность командной строки Windows пинговать сайт. Но просто для справки, все, что есть в файле, это комментарии WSL о том, как остановить автоматическую генерацию.
Есть ли способ снова заставить запросы на сайт работать или какой-то другой способ получить текст с определенной страницы, который будет работать? Я также просто хотел бы знать, может ли кто-нибудь еще успешно пропинговать ncode.syosetu.com?
Обновлять:
Я попытался запустить простой интерактивный python3 request.get в WSL для google.ca и столкнулся с той же ошибкой. Я также попробовал ту же команду на своем рабочем компьютере, но на ncode.syosetu.com, и там это сработало. Итак, я предполагаю, что проблема связана с моим компьютером/интернетом. Хотя даже на своем рабочем компьютере я не мог пропинговать или отследить ncode.syosetu.com.
Я также пробовал:
s = requests.Session()
s.mount('http://', requests.adapters.HTTPAdapter(max_retries=1000))
s.get('https://ncode.syosetu.com/n6371es/')
Но все же превышено максимальное количество попыток с URL-адресом (вызвано временным сбоем в разрешении имени)
Вы пытались подключиться к точке доступа через Интернет на своем мобильном телефоне? Чтобы увидеть, если проблема с сетью
Спасибо за проверку работы кода. Я не пробовал использовать мобильную точку доступа телефона, мой компьютер не имеет Wi-Fi, но я смог подключиться к нему. Я снова попытался выполнить запросы, используя свою мобильную сеть, но все равно получил ту же ошибку (как для ncode.syosetu.com, так и для google.ca). Также просто для справки, у меня есть другой провайдер для мобильного и домашнего интернета.
Я понял это благодаря комментариям @Caridorc. Я проверил запрос, используя свой мобильный интернет, и подтвердил, что проблема не в интернет-провайдере. Это заставило меня подумать, что невозможность пропинговать / отследить сайт могла ввести меня в заблуждение, поэтому я установил запросы в командной строке Windows, и запрос работал там. Так что проблема была связана с WSL. Я заглянул в /etc/resolv.conf и установил nameserver 8.8.8.8, после чего запрос снова начал работать в WSL. Было несколько шагов, чтобы изменения закрепились, но я думаю, что проблема решена.
В конце концов, проблема была с WSL, по какой-то причине он потерял возможность доступа в Интернет.
Я нашел исправление в https://github.com/microsoft/WSL/issues/5420.
Исправление заключалось в следующем:
sudo bash -c 'echo "[network]" > /etc/wsl.conf'
sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'
(in powershell) wsl --shutdown
sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
По сути, это сказало WSL прекратить повторное создание /etc/resolv.conf, перезапустить WSL, чтобы применить изменения /etc/wsl.conf, удалить неработающую ссылку /etc/resolv.conf, а затем обновить DNS с помощью нового файла /etc/resolv. .conf
Код s = requests.Session() s.mount('http://', requests.adapters.HTTPAdapter(max_retries=1000)) s.get('https://ncode.syosetu.com/n6371es/') работает для меня