Проверка ответа с порта localhost:8000

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
26
28
Здравствуйте, как указать условие
if на http://localhost:8000/ ответ == 'Не удается получить доступ к сайту':
опробовал:

Python:
import urllib.request

http_localhost_8000 = urllib.request.urlopen('http://localhost:8000/').read().decode('utf8')
print(http_localhost_8000) # ответ браузера с адреса http://localhost:8000/

Пока ошибка:
urllib.error.URLError: <urlopen error [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение>
так как же узнать ответ?
 
Последнее редактирование модератором:
  • Мне нравится
Реакции: Dr. Mundo

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 669
477
83
если сервер не работает, или он не прослушивает указанный в подключении порт, он вам выдает такую ошибку, это свидетельствует о том, что вам нужно, то есть клиенту не удалось установить соединение (Не удается получить доступ к сайту )...
так же такая ошибка возникает, если вы используете прокси, и в коде этого не учитываете...
 

borntohack

змееуст
Команда форума
Модератор
Апр 22, 2020
78
62
18
40
Москва, РФ
Python:
import requests
try:
    requests.get('http://localhost:8000')
    print("Подключение установлено")
except:
    print("Подключение не установлено")
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
26
28
спасибо, то, что нужно
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
26
28
вопрос назрел, как закрыть открытый сервер?
открываю кодом
Код:
import requests
try:
    requests.get('http://localhost:8000')
    print('Подключение установлено')
except:
    print('Подключение не установлено')
    from http.server import HTTPServer, CGIHTTPRequestHandler
    server_address = ("", 8000)
    httpd = HTTPServer(server_address, CGIHTTPRequestHandler)
    httpd.serve_forever()
и почему при вводе в браузер localhost:8000/server/index.py
отображает
#!/usr/bin/env python3
print("Content-type: text/html")
print()
print("<h1>Hello world!</h1>")
а я ожидаю только
Hello world!-как исправить? спс
 

borntohack

змееуст
Команда форума
Модератор
Апр 22, 2020
78
62
18
40
Москва, РФ
Полагаю, вам нужно глубже копнуть в специфику работы HTTP протокола.
Тезисно ответы таковы:
1. Его не нужно закрывать с точки зрения сессии. Он ответил клиенту и на том сессия будет завершена (если ничего специально не дописано).
1а. Если речь идет о том, как его вообще потушить, то либо нужно погасить соответствующий тред httpd (любым доступным способом), либо остановить весь скрипт.
2. Вы обратились к файлу и получили содержимое файла, поскольку ваш сервер не знает как его обрабатывать. Этот код не интерпретируется и не исполняется. В данном случае, рекомендую обратиться к документации по соответствующему модулю (HTTPServer)
 

Dr. Mundo

Модератор
Команда форума
Модератор
Фев 13, 2024
26
1
3
Ваша ошибка urllib.error.URLError: <urlopen error [WinError 10061]> означает, что сервер по адресу http://localhost:8000/ не запущен или не принимает подключения.

Решение:​

Вам нужно обработать исключения (URLError и HTTPError), чтобы корректно определить, что сервер недоступен.

Рабочий код:​

Python:
import urllib.request
import urllib.error

url = "http://localhost:8000/"

try:
    response = urllib.request.urlopen(url)
    content = response.read().decode('utf8')
    print("Ответ сервера:", content)
except urllib.error.HTTPError as e:
    print(f"HTTP ошибка: {e.code} - {e.reason}")
except urllib.error.URLError as e:
    print(f"Ошибка сети: {e.reason}")

Что будет происходить:​

  1. Если сервер запущен и отвечает, программа выведет его HTML-ответ.
  2. Если сервер недоступен (WinError 10061), сработает URLError, и программа выведет сообщение Ошибка сети: [WinError 10061] ...
  3. Если сервер отвечает, но с ошибкой (например, 404 или 500), сработает HTTPError, и программа выведет код и причину ошибки.
Таким образом, вы сможете корректно обработать ситуацию, когда сайт недоступен. 🚀
 

Форум IT Специалистов