python-检查网站是否正常工作时如何绕过或捕获socket.timeout错误?

前端之家收集整理的这篇文章主要介绍了python-检查网站是否正常工作时如何绕过或捕获socket.timeout错误? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我一直在开发一个程序,以检查网站是否正常运行.我正在从Excel工作表中获取URL,然后将结果粘贴为True&在同一个Excel工作表中为false,但是对于某些URL,我收到了socket.timeout错误,此后代码无法正常工作.这是代码

  1. import http.client as httpc
  2. from urllib.parse import urlparse
  3. import pandas as pd
  4. import xlwings as xw
  5. import smtplib
  6. from xlsxwriter import Workbook
  7. import socket
  8. x=[]
  9. df = pd.read_excel (r'xyz.xlsx')
  10. df1=pd.DataFrame(df,columns=['URL'])
  11. print(df1)
  12. url_list=df["URL"].tolist()
  13. print(url_list)
  14. for i in url_list:
  15. def checkUrl(i):
  16. if 'http' not in i:
  17. i= 'https://'+i
  18. p = urlparse(i)
  19. conn = httpc.HTTPConnection(p.netloc,timeout=4)
  20. conn.request('HEAD',p.path)
  21. try:
  22. resp = conn.getresponse()
  23. return resp.status<400
  24. except requests.exceptions.RequestException:
  25. return False
  26. print(checkUrl(i))
  27. x.append(checkUrl(i))
  28. workbook = Workbook('abc.xlsx')
  29. Report_Sheet = workbook.add_worksheet()
  30. Report_Sheet.write(0,1,'Value')
  31. Report_Sheet.write_column(1,x)
  32. workbook.close()
最佳答案
这段代码有很多问题.

>即使URL需要HTTPS,您也可以无条件使用HTTP
>您执行尝试的请求撤出:
> except子句期望有一个request.exceptions.RequestException不能被您的代码抛出

由于您不是在使用请求库,而是在使用较低级别的http.client,因此您只应该期待套接字库中的错误,这些都是OSError的子类.

您的代码可能会变成(请注意:未经测试):

  1. def checkUrl(i):
  2. if 'http' not in i:
  3. i= 'https://'+i
  4. p = urlparse(i)
  5. if (p.scheme == 'http'):
  6. conn = httpc.HTTPConnection(p.netloc,timeout=4)
  7. else:
  8. conn = httpc.HTTPSConnection(p.netloc,timeout=4)
  9. try:
  10. conn.request('HEAD',p.path)
  11. resp = conn.getresponse()
  12. return resp.status<400
  13. except OSError:
  14. return False

猜你在找的Python相关文章