نحوه بررسی اتصال اینترنت کاربر در پایتون

۴ روش مختلف برای بررسی اتصال به اینترنت

با خواندن این مقاله، می توانید توابعی را که اتصال به اینترنت در پایتون را بررسی می کند، تعریف کنید .اگر برنامه شما به اتصال اینترنت وابسته است و این کار بسیار ضروری می باشد، توصیه می شود از قبل اتصال اینترنت را بررسی کنید. بیایید به بخش بعدی برویم و کدهای پایتون را برای این کار بررسی کنیم.

پیاده سازی
در این مقاله ، چهار روش مختلف برای بررسی اتصال به اینترنت ارائه می دهیم و هر کدام از آنها ماژول های مختلفی استفاده می کنند و قدرت و ضعف خاص خود را دارند.

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  برای ماژول درخواستها ثانویه است.

محمد صداقتی

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *