۴ روش مختلف برای بررسی اتصال به اینترنت
با خواندن این مقاله، می توانید توابعی را که اتصال به اینترنت در پایتون را بررسی می کند، تعریف کنید .اگر برنامه شما به اتصال اینترنت وابسته است و این کار بسیار ضروری می باشد، توصیه می شود از قبل اتصال اینترنت را بررسی کنید. بیایید به بخش بعدی برویم و کدهای پایتون را برای این کار بررسی کنیم.
پیاده سازی
در این مقاله ، چهار روش مختلف برای بررسی اتصال به اینترنت ارائه می دهیم و هر کدام از آنها ماژول های مختلفی استفاده می کنند و قدرت و ضعف خاص خود را دارند.
httplib
بر اساس داکیومنت های این ماژول ، httplib خود را اینگونه تعریف می کند:
کلاس هایی که در سمت کلاینت با پروتکل های HTTP و HTTPS اجرا می شوند معمولا به صورت مستقیم مورد استفاده قرار نمی گیرند برای استفاده آن ها از ماژول های urllib برای مدیریت URL های HTTP و HTTPS بهره می گیرند.
کد زیر را بررسی کنید
try:
import httplib
except:
import http.client as httplib
تابعی را تعریف کنید که دو پارامتر ورودی را بپذیرد. تمام توابع تعریف شده برای سایر روشها از همان پارامترهای ورودی با اختلافات جزئی پیروی می کنند. ما از www.google.com به عنوان پیش فرض استفاده می کنیم. اگر با مشکلی مواجه شدید، آن را بر اساس تنظیمات مورد نظر خودتان به هر URL دلخواهی که دارید تغییر دهید.
def checkInternetHttplib(url=”www.google.com”, timeout=3):
یکHTTPConnection بر اساس پارامترهای ورودی ایجاد کنید.
conn = httplib.HTTPConnection(url, timeout=timeout)
یک ریکوست ایجاد کنید که تنها هدر را دریافت کند. به صورت تئوری این روش از دریافت کل پاسخ بسیار سریعتر است و اگر پاسخ دریافت شده True بود موفق و در صورت بازگرداندن False به معنی ناموفق می باشد.
try:
conn.request(“HEAD”, “/”)
conn.close()
return True
except Exception as e:
print(e)
return False
کد کامل به شکل زیر است.
try:
import httplib
except:
import http.client as httplib
def checkInternetHttplib(url=”www.google.com”, timeout=3):
conn = httplib.HTTPConnection(url, timeout=timeout)
try:
conn.request(“HEAD”, “/”)
conn.close()
return True
except Exception as e:
print(e)
return False
socket
در تعریف داکیومنت های اصلی ماژول socket نوشته شده است:
“یک تابع با پارامترهای ورودی تعریف می کند توجه کنید که به جای URL در آرگومان اول از host استفاده می کند و پارامتر اضافی دیگر port است.برای مثال گوگل بدین شکل می باشد. ۸.۸.۸.۸ برای DNS پابلیک گوگل (google-public-dns-a.google.com) و پورت TCP برابر ۵۳ است.
def checkInternetSocket(host=”8.8.8.8″, port=53, timeout=3):
با تایم اوت به صورت پیش فرض :
try:
socket.setdefaulttimeout(timeout)
socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect((host, port))
return True
except socket.error as ex:
print(ex)
return False
نمونه کد:
import socket
def checkInternetSocket(host=”8.8.8.8″, port=53, timeout=3):
try:
socket.setdefaulttimeout(timeout)
socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect((host, port))
return True
except socket.error as ex:
print(ex)
return False
requests
در تعریف این ماژول نوشته شده:
یک کتابخانه زیبا و ظریف HTTP است که برای پایتون نوشته شده است و اجازه می دهد درخواست های HTTP/1.1 را به راحتی بدون نیاز داشتن به اضافه کردن URL به صورت دستی و یا داده ها به صورت POST انجام دهید و ارسال کنید.
در ابتدا تعریف بدین صورت می باشد:
import requests
def checkInternetRequests(url=’http://www.google.com/’, timeout=3):
کد زیر را درون تابع اجرا کنید. به منظور سرعت بخشیدن به زمان نتیجه و پاسخ، از head به جای get استفاده خواهیم کرد.
try:
r = requests.head(url, timeout=timeout)
return True
except requests.ConnectionError as ex:
print(ex)
return False
مثال:
import requests
def checkInternetRequests(url=’http://www.google.com/’, timeout=3):
try:
#r = requests.get(url, timeout=timeout)
r = requests.head(url, timeout=timeout)
return True
except requests.ConnectionError as ex:
print(ex)
return False
urllib.request
توابع و کلاسهایی را که به باز کردن آدرس های اینترنتی (بیشتر HTTP ) تعریف می کند که در موارد پیچیده به تأیید اعتبار اولیه، تغییر مسیرها ، کوکی ها و موارد دیگر کمک می کند.
import urllib.request
def checkInternetUrllib(url=’http://google.com’, timeout=3):
کد اجرایی در تابع:
try:
urllib.request.urlopen(url, timeout=timeout)
return True
except Exception as e:
print(e)
return False
نمونه کد:
import urllib.request
def checkInternetUrllib(url=’http://google.com’, timeout=3):
try:
urllib.request.urlopen(url, timeout=timeout)
return True
except Exception as e:
print(e)
return False
جمع بندی
بیایید مطالبی که امروز یاد گرفتیم را یادآوری کنیم.
ما آموزشمان را برای بررسی ارتباط اینترنتی با استفاده از ماژول httplib شروع کردیم و فقط یک درخواست ساده برای به دست آوردن هدر انجام دادیم و این روش بسیار کارآمد بود.
در مرحله بعد ، ما سعی کردیم تابع دیگری را با استفاده از ماژول سوکت اجرا کنیم. در این قسمت ما از DNS عمومی Google و پورت ۵۳ به عنوان host درخواست استفاده کردیم. در شرایط عادی، این روش باید از نظر زمان اجرا سریعترین باشد.
ما همچنین کتابخانه سطح بالا به نام request برای ارسال درخواست HTTP1.1 را تست کردیم. اگر از روش get استفاده می کنید ، پاسخ برگشتی تمام داده ها را شامل می شود و در مقایسه با httplib بسیار کندتر خواهد بود. توصیه می شود برای سرعت بخشیدن به زمان نتیجه از متد head استفاده کنید.
در آخر، ما از ماژول urllib.request استفاده کردیم تا یک درخواست ساده را به همان URL انجام دهیم. urrlib.request برای ماژول درخواستها ثانویه است.
- تفاوت بین روتر و فایروال - مهر ۱۰, ۱۴۰۳
- مسیریابی استاتیک در ویندوز - مهر ۸, ۱۴۰۳
- پروتکل SNMP - شهریور ۱۵, ۱۴۰۳