6.1 Proxy nə üçündür?
İndi elə bir zamandır ki, hər ölkənin öz interneti var. Artıq qadağalar ayrı-ayrı istifadəçilərə deyil, bütöv saytlar, domenlər, tətbiqlər və hətta ölkələrə də qoyulur. Pisdir. Amma sən proqramçı olsan, bu problem deyil — internetdə bir sürü proxy server var...
Proxy serveri (və ya sadəcə proxy) — müştəri (məsələn, sənin kompüterin) ilə daxil olmağa çalışdığın server arasında vasitəçi olan aralıq serverdir. Proxy server müştəridən sorğuları qəbul edir, onları hədəf serverə göndərir, cavabları alır və yenidən müştəriyə qaytarır.
Hər bir böyük məhsulda ən azı bir neçə müxtəlif faydalı funksiyanı yerinə yetirən proxy serverlər olur. Məsələn, belə funksiyalar:
- Anonimləşdirmə: Proxy serveri müştərinin real IP ünvanını gizlədə bilər, internet resurslarına anonim giriş təmin edir. IP ünvan — şəbəkədə cihazın unikal identifikatorudur, və onun gizlədilməsi istifadəçinin məxfiliyini qorumağa kömək edir.
- Caching: Proxy server tez-tez istənilən resursları cache edib saxlayır ki, bu da onlara daha tez giriş imkanı yaradır və şəbəkə resurslarına olan yükü azaldır. Məsələn, əgər çox sayda istifadəçi bir və eyni web səhifəni istəyirsə, proxy server səhifənin bir nüsxəsini saxlayır və lazımsız olaraq əsas serverə müraciət etmədən onu çatdırır.
- Kontent filtrasiyası: Proxy server müəyyən web-saytlara və ya kontent növlərinə girişləri bloklaya bilər, bu da nəzarət və təhlükəsizliyi təmin edir.
- Məhdudiyyətlərin keçilməsi: Proxy serveri region məhdudiyyətlərini keçməyə kömək edə bilər, müəyyən coğrafi ərazilərdə bloklanmış resurslara giriş təmin edir.
- Loglama və monitoring: Proxy serveri bütün sorğuları və cavabları qeydə ala bilər ki, şəbəkə trafiki izlənə və təhlil edilə bilinsin.
Proxy serverin iş prinsipi
- Müştəri sorğu göndərir: Müştəri cihazı (məsələn, kompüter və ya smartfon) proxy serverə sorğu göndərir.
- Proxy server sorğunu emal edir: Proxy server sorğunu alır, onu dəyişə bilər (məsələn, başlıqları əlavə edib və ya silə bilər) və onu hədəf serverə ötürür.
- Hədəf server cavab verir: Hədəf server sorğunu emal edir və cavabı proxy serverə göndərir.
- Proxy server cavabı müştəriyə qaytarır: Proxy server cavabı hədəf serverdən alır, onu sonrakı istifadə üçün cache edə bilər və müştəriyə ötürür.
Proxy serverdən istifadə etməyin üstünlükləri
- Təhlükəsizliyin yaxşılaşdırılması: Proxy server daxili şəbəkələri xarici dünyadan gizlədə bilər, hücum riskini azaldır.
- Daha sürətli giriş: Tez-tez tələb olunan resursların cache edilməsi onlara olan giriş vaxtını azaldır.
- Giriş nəzarəti: Proxy serveri müəyyən saytlar və ya kontent növlərinə olan girişləri məhdudlaşdıraraq, şəbəkədən istifadəni nəzarət altına alır.
- Şəbəkə yükünün azaldılması: Cache və trafik filtrasiyası vasitəsilə proxy serverlər ümumi ötürülən məlumatların həcmini və şəbəkə yükünü azalda bilər.
Bir çox server proqramları təhlükəsizlik səbəbindən birbaşa internetə çıxışı olmur. Onlar internetə proxy vasitəsilə daxil olurlar, və proxy’nin icazə verilmiş saytlar və resurslar siyahısı olur. Bu səbəbdən də, sənin proqramların proxy ilə işləməyi bacarmalıdır.
Bütün üstünlüklərinə baxmayaraq, proxy serverlərdən istifadə bəzi mənfi cəhətləri də ola bilər. Məsələn, sorğular əlavə bir mərhələdən keçdiyi üçün əlaqə sürəti azala bilər. Üstəlik, bəzi saytlar məlum proxy serverləri vasitəsilə girişləri bloklaya bilər.
6.2 Proxy və requests
modulu
requests
kitabxanası proxy-serverlərin istifadəsini proxies
parametri vasitəsilə dəstəkləyir.
HTTP (Hypertext Transfer Protocol) və HTTPS (HTTP Secure) — internetdə məlumatların ötürülməsi üçün protokollardır. HTTPS — bu protokolun qorunan versiyasıdır. Onlar üçün fərqli proxy-serverlər istifadə edilə bilər, çünki HTTPS-in şifrələmə xüsusiyyətlərinə görə fərqli emal tələb oluna bilər.
HTTP-proxy istifadəsinə dair nümunə
Proxy olaraq adətən tək bir proxy yox, bütöv bir siyahı ötürülür. Bu çox rahatdır, əgər bəzi proxy-lər banlanarsa və ya əlçatmaz olarsa.
requests.get()
funksiyasını proxy vasitəsi ilə çağırmaq nümunəsi.
import requests
# Sorgu ünvanı
url = 'http://httpbin.org/ip'
# Proxy-server tənzimləmələri
proxies = { 'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080', }
# Proxy vasitəsilə GET sorğusu göndərilir
response = requests.get(url, proxies=proxies)
print(response.json())
HTTP sorğuları birinci proxy-server vasitəsilə, HTTPS isə ikinci proxy vasitəsilə gedəcək.
Autentifikasiyalı proxy istifadəsi nümunəsi
Bir çox proxy-server əvvəlcə autentifikasiya tələb edir, daha sonra istifadə imkanını verir. Burada bizə maraqlı bir fənd kömək edəcək…
URL-lər yeni yarananda standart URL-ə daxil edilmişdi ki, mənbəyə giriş üçün login və şifrə birbaşa URL-də ötürülə bilsin. Belə görünür:
http://user:password@domain/path
Ona görə, əgər proxy-server autentifikasiya tələb edirsə, giriş məlumatlarını URL-də daxil edə bilərsiniz.
Nümunə:
import requests
# Sorgu ünvanı
url = 'http://httpbin.org/ip'
# Autentifikasiyalı proxy-server tənzimləmələri
proxies = { 'http': 'http://user:password@10.10.1.10:3128',
'https': 'http://user:password@10.10.1.10:1080', }
# Proxy vasitəsilə GET sorğusu göndərilir
response = requests.get(url, proxies=proxies)
print(response.json())
Mən bunu praktikada çox görməmişəm, amma öz test proxy-serverinizi yaratsaz, niyə də olmasın.
Lakin qeyd etmək lazımdır ki, login və şifrənin URL-də ötürülməsi təhlükəsiz olmaya bilər, çünki URL brauzerin tarixində və ya server loglarında saxlanıla bilər. Real tətbiqlərdə daha təhlükəsiz autentifikasiya metodlarından istifadə etmək tövsiyə olunur.
Real tətbiqlərdə proxy-serverlər üçün giriş məlumatlarının təhlükəsiz saxlanmasını unutmayın. Heç vaxt şifrələri açıq formada kodda və ya konfiqurasiya fayllarında saxlamayın. Bunun əvəzinə mühit dəyişənləri və ya təhlükəsizlik saxlama vasitələrindən istifadə edin.
6.3 Proxy və http.client
Proxy-serverlərlə işləmək üçün http.client
modulunda əlaqəni və sorğu başlıqlarını əl ilə quraşdırmaq lazımdır.
Sadəcə olaraq host
və portu əlaqə yaratdığınızda göstərməlisiniz.
Nümunə:
# Proxy-serverin sazlamaları
proxy_host = '10.10.1.10'
proxy_port = 3128
# Proxy-serverlə əlaqənin yaradılması
conn = http.client.HTTPConnection(proxy_host, proxy_port)
Sonra proxy-serverlə tuneli qurmalısınız, və yalnız bundan sonra ona sorğu göndərə bilərsiniz:
dest_url = 'httpbin.org'
dest_path = '/ip'
# Sorğunun formalaşdırılması və göndərilməsi
conn.set_tunnel(dest_url)
conn.request('GET', dest_path)
Proxy-serverin düzgün işlədiyini yoxlamaq üçün öz IP ünvanınızı proxy istifadə etməzdən əvvəl və sonra müqayisə edə bilərsiniz. Bunun üçün mövcud IP ünvanınızı göstərən servislerden istifadə edə bilərsiniz, məsələn, httpbin.org/ip.
Hər şey çox «asan». Proxy istifadə etmək üçün tam nümunə və http.client
aşağıdakı kimi olacaq:
import http.client
# Proxy-serverin sazlamaları
proxy_host = '10.10.1.10'
proxy_port = 3128
dest_url = 'httpbin.org'
dest_path = '/ip'
# Proxy-serverlə əlaqənin yaradılması
conn = http.client.HTTPConnection(proxy_host, proxy_port)
# Sorğunun formalaşdırılması və göndərilməsi
conn.set_tunnel(dest_url)
conn.request('GET', dest_path)
# Cavabın alınması
response = conn.getresponse()
print(response.status, response.reason)
print(response.read().decode('utf-8'))
# Əlaqənin bağlanması
conn.close()
Nə deyim? requests
modulundan istifadə etmək, əlbəttə, daha asandır. Amma! Çox modullar və framework-lar məhz aşağı səviyyəli http.client
-dən istifadə edir. Onunla necə işləməyi öyrənmək lazımdır ki, onların işini düzgün tənzimləyə bilərsiniz.
Bütün üstünlüklərə baxmayaraq, proxy-serverlərdən istifadə həm də mənfi cəhətlərə malik ola bilər. Məsələn, bu, əlaqə sürətinin azalmasına səbəb ola bilər, çünki sorğular əlavə bir həlqədən keçir. Bundan başqa, bəzi saytlar tanınmış proxy-serverlərlə girişləri bloklaya bilər. Buna görə də proxy istifadə edərkən həm onun üstünlüklərini, həm də potensial məhdudiyyətlərini nəzərə almaq vacibdir.
GO TO FULL VERSION