#python #http #url #python-requests
#python #http #url #python-запросы
Вопрос:
Я кодирую короткий код, чтобы проверить, является ли URL-адрес действительным или нет. Однако, когда я проверяю недопустимый URL, он не отвечает каким-либо кодом состояния с ошибкой. Он просто не запускает код.
Могу ли я получить некоторую помощь с этим кодом ниже:
import requests
import string
# Welcome to IsItDown.py!
# Please write a URL or URLs you want to check. (separated by a comma)
#
# input()
#
# <check for valid URL>
#
# Do you want to start over? (y/n)
# if y:
# elif n: print(Okay. Bye!)
# else: That's not a valid answer
def url_check(urls):
for url in urls:
resp = requests.get(url)
if resp.status_code == 200:
print(f"{url} is up!")
else:
raise Exception(f"{url} is down!")
print("Welcome to IsItDown.py!")
urls = ['google.com .', ' na1v2e12312r.com ']
for index, item in enumerate(urls):
item = item.strip(string.punctuation).strip()
if "http" not in item:
item = "http://" item
urls[index] = item
print(urls)
try:
url_check(urls)
except Exception as e:
print(e)
Комментарии:
1.
It just don't run the code.
Действительно? Какой результат вы получаете? Генерируется ли исключение, которое вы улавливаете? Может быть, вы могли бы перехватить исключение и обработать его?2. @Random Davis HTTPConnectionPool(хост =’na1v2e12312r.com ‘, порт=80): Превышено максимальное количество попыток с url: / (Вызвано NewConnectionError(‘<urllib3.connection. Объект HttpConnection в 0x7efc88f33b50>: Не удалось установить новое соединение: [Ошибка -2] Имя или служба неизвестны ‘))
3. Так почему вы не можете перехватить
NewConnectionError
и обработать этот случай?4. Я просто хочу знать код состояния для недопустимого URL, чтобы распечатать «URL недоступен». Но код не получает дальнейшего из-за ошибки.
5. Вы получаете код состояния только в том случае, если вам удалось подключиться к URL. Но вы не смогли этого сделать, поэтому нет кода состояния.
Ответ №1:
Поскольку это ошибка, которую вы получаете при попытке получить доступ к недопустимому URL:
NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7efc88f33b50>:
Failed to establish a new connection: [Errno -2] Name or service not known')
Это означает, что для того, чтобы перехватить ошибку и указать, что URL-адрес недействителен, вам нужно будет использовать try
and except
, как вы сейчас делаете, за исключением того, что вместо этого вы поймаете эту конкретную ошибку:
try:
resp = requests.get(url)
except NewConnectionError:
print(f'Invalid URL: "{url}"')
# at this point, you can continue the loop to the next URL if you want