如何在Python中检查URL的连接性

问题描述 投票:0回答:3

我的要求几乎与请求相同 - 如何判断您是否收到成功消息?

但是每当我无法到达 URL 时我需要打印错误..这是我的尝试..

# setting up the URL and checking the conection by printing the status

url = 'https://www.google.lk'

try:
    page = requests.get(url)
    print(page.status_code)
except requests.exceptions.HTTPError as err:
    print("Error")

问题不是只打印“错误”,而是打印整个错误消息,如下所示。

Traceback (most recent call last):
  File "testrun.py", line 22, in <module>
    page = requests.get(url)
  File "/root/anaconda3/envs/py36/lib/python3.6/site-packages/requests/api.py", line 76, in get
    return request('get', url, params=params, **kwargs)
  File "/root/anaconda3/envs/py36/lib/python3.6/site-packages/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "/root/anaconda3/envs/py36/lib/python3.6/site-packages/requests/sessions.py", line 530, in request
    resp = self.send(prep, **send_kwargs)
  File "/root/anaconda3/envs/py36/lib/python3.6/site-packages/requests/sessions.py", line 643, in send
    r = adapter.send(request, **kwargs)
  File "/root/anaconda3/envs/py36/lib/python3.6/site-packages/requests/adapters.py", line 516, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='learn.microsoft.com', port=443): Max retries exceeded with url: /en-us/microsoft-365/enterprise/urls-and-ip-address-ranges?view=o365-worldwide (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7ff91a543198>: Failed to establish a new connection: [Errno 110] Connection timed out',))

有人可以告诉我如何修改我的代码,以便仅在出现任何问题时才打印“错误”吗?然后我可以将其扩展到其他一些需求。

python python-requests
3个回答
1
投票

对于那些想要检查 URL 是否可用于 POST 请求但又不想向 API 发送任何实际数据的人,我建议使用以下方法:

import requests

url = 'https://www.example.com'

try:
    response = requests.options(url)
    if response.ok:   # alternatively you can use response.status_code == 200
        print("Success - API is accessible.")
    else:
        print(f"Failure - API is accessible but sth is not right. Response codde : {response.status_code}")
except (requests.exceptions.HTTPError, requests.exceptions.ConnectionError) as e:
    print(f"Failure - Unable to establish connection: {e}.")
except Exception as e:
    print(f"Failure - Unknown error occurred: {e}.")

使用 GET 请求检查 POST 端点是否存在会导致 HTTP 405 – Method Not Allowed,这有点问题,而使用

requests.options()
返回 HTTP 200。


0
投票

您没有捕获正确的异常。

import requests


url = 'https://www.googlggggggge.lk'

try:
    page = requests.get(url)
    print(page.status_code)
except (requests.exceptions.HTTPError, requests.exceptions.ConnectionError):
    print("Error")

您也可以执行

except Exception
,但请注意,
Exception
太宽泛,在大多数情况下不建议这样做,因为它会捕获所有错误


0
投票

您需要使用一般异常

except
或捕获请求模块可能抛出的所有异常,例如
except (requests.exceptions.HTTPError, requests.exceptions.ConnectionError)

有关完整列表,请参阅:尝试/除外使用 Python requests 模块的正确方法?

© www.soinside.com 2019 - 2024. All rights reserved.