запросы python.get с недопустимым URL

#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