我的要求几乎与请求相同 - 如何判断您是否收到成功消息?
但是每当我无法到达 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',))
有人可以告诉我如何修改我的代码,以便仅在出现任何问题时才打印“错误”吗?然后我可以将其扩展到其他一些需求。
对于那些想要检查 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。
您没有捕获正确的异常。
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
太宽泛,在大多数情况下不建议这样做,因为它会捕获所有错误
您需要使用一般异常
except
或捕获请求模块可能抛出的所有异常,例如except (requests.exceptions.HTTPError, requests.exceptions.ConnectionError)
。
有关完整列表,请参阅:尝试/除外使用 Python requests 模块的正确方法?