Hoşgeldin Sivil

.
Forum Yöneticisi: Administrator | Bu Bölümde Yetkili Tüm Yöneticiler? | Bu konuyu okuyanlar?

 Forum Ana Sayfa
   Python

   
 Kurallar    Aktif Konular    PM    Kayıt Ol     Giriş Yap  
» Python İle Web Server İnşa Edelim | 1
[ 1 ]   2
 
 Konu Kalitesi %15
Oy Ver   
 
Gönderilme Tarihi: 25 Eylül 2023 23:54:18 - Kayıtlı IP
  Mesajı İhbar Et!     

Dağıztanlı08

Albay

İstanbul
23 Şubat 2022
53 Mesaj

Durum: Complicated


Aktiflik
Seviye
Deneyim
Moderatör

Görev Org./Grup :

Lojistik


Selamun Aleyküm arkadaşlar. Bu seride Python ile "Web Server" nasıl oluşturabiliriz ? Ondan bahsedeceğim.

Web Server İnşa Edelim Part 1

Öncelikle basitce bir "Web server" nedir ? Ondan bahsedelim.
 


Yukarıdaki resimde bir "Web Server" nasıl çalışmakta olduğu basit bir şekilde şematize edilmiştir. Kısaca açıklamak gerekirse fiziksel bir sunucu üzerinde bulunan client(istemci) sunucunun bir istekte bulunmasını bekleyen ağ sunucusudur. Bir istek aldığında bu isteğe karşılık bir response(yanıt) üretir ve bunu geri client(istemci) geri yollar. "Client" ve "Server" arasındaki iletişim ise "HTTP" protokolü aracılığıyla olmaktadır. Burada bahsetmiş olduğumuz Client(istemci) bir tarayıcı ya da "HTTP" konuşabilen bir yazılım olabilir(curl v.b)

Basit bir "Web Serveri" Python ile nasıl kodlayabiliriz onu anlayabilmek için aşağıdaki kodu inceleyelim;


Burada görmüş olduğumuz kod bloğunu incelemeye başlarsak öncelikle "socket.socket" ile bir socket objesi oluşturduğumuzu görüyoruz.
Bu oluşturduğumuz socket objesi kullanılan "listen_socket.bind(HOST,PORT)" fonksiyonu sayesinde belirtilmiş olan "HOST" ve "PORT"  üzerinden socket objesine "HOST" ve "PORT" tanımlaması yapar. Belirtilen IP ve PORT üzerinden dinlemeye "listen_socket.listen(1)" ile başlar.
Daha sonrasında ise "listen_socket.accept()" fonksiyonu ile gelen istekleri kabul ediyoruz. "client_connection.recv(1024)" fonksiyonu sayesinde istemciden gelmiş olan veriyi alıyoruz ve "utf-8" ile decode ediyoruz. Son olarak bizim istemciye bir veri göndermemiz gerektiğinden dolayı
"client_connection.sendall(http_response)" fonksiyonu sayesinde oluşturmuş olduğumuz HTTP mesajını client(istemci) sunucuya yolluyoruz.
İstemci sunucuya bir istek yaptığında karşısında oluşturduğumuz "http_response" mesajını görecektir.

Bakalım anlattıklarımız nasıl işliyor. Yukarıdaki kodu "webserver.py" olarak kaydettikten sonra programı "python3 webserver.py" şeklinde çalıştıralım.



Şu anda socket objemiz oluşmuş durumda ve "8888" porttan bir veri gelmesini bekliyor. Ben istemci olarak "curl" kullanacağım siz alternatif olarak bir tarayıcıdanda bu işlemleri yapabilirsiniz.(Firefox,chrome v.b)


Görmüş olduğunuz gibi "127.0.0.1:8888" üzerinden servere bir istek yolladığımda server tarafından bize gelen veri "http_response" mesajı olacaktır.



Resimde görmüş olduğunuz işlemler aynı şekilde gerçekleşmektedir.  Biz burada "telnet" yerine "Curl" ile istek yolladık fakat mantık tamamen aynıdır.
Peki biz "Curl" ile bir mesaj yolladık ama ne mesajı yolladık ? Server bizim ondan bir veri istediğimizi nasıl anladı ? Bir de bunu inceleyelim.




Bir HTTP isteği üç ana kısımdan oluşur. Birinci kısmı isteğin tipini belli etmektedir. Yukarıdaki resimde görmüş olduğunuz üzere biz web servere  "GET"
isteği yolladık çünkü biz web server'in  bir veri döndürmesini istiyoruz bunun için kullanacağımız method "GET" methodudur. Path kısmında ise web server üzerinde görmek istediğimiz sayfayı belli ederken son kısımda ise kullanacağımız HTTP'nin versiyonunu belirtiyoruz. Burada eklemek istediğim bir şey var tarayıcı kullanırken url kısmına adresi ve portu yazdıktan sonra web tarayıcısı bize tam olarak bu işi yapmaktadır. Server kısmına otomatik olarak bir "GET" methodu oluşturup yollamaktadır. Dolayısıyla işin mantığını anlamak açısından tarayıcı yerine "Curl" kullanmanız daha iyi olacaktır.



Server bu isteği(request) alır ve gelen isteği okur. Ona uygun olan response(yanıtı) tekrar client(istemci) tarafına yollar. Yukarıda resimde istemci tarafından gelen isteğe yanıt olarak gidecek olan response paketini görüyoruz. Paketin içerisinde "200 OK" yazısı bulunmakta. Bu ne anlama geliyor ?
Bu "HTTP" isteğinin başarılı bir şekilde alındığını belli etmektedir. İlerleyen yazılarımızda farklı "HTTP Status Code" göreceğiz şimdilik "200" sayısının "HTTP" isteğinin başarılı olarak alındığını belli ettiğini bilmeniz yeterli olacaktır.


Yukarıdaki resim ise "Web Server" tarafını belirtiyor. Anlatmış olduğumuz "GET" methodunu yakalamış ve hangi "Host" üzerinden geldiğini bastırmıştır.
Görmüş olduğunuz "User-Agent" bilgisi ise kullanıcının isteği bize nereden ilettiğini belli etmektedir. Biz isteği "curl" ile yolladığımız için otomatik olarak "User-Agent" bilgisi "curl/7.88.1" şeklinde gözükmektedir. Bu bilgi değiştirilebilir. Gelen her veri doğru olacak diye düşünmeyin. Bunu manipüle etmenin çok basit yöntemleri bulunmaktadır.

İşte temel mantığıyla bir "Web Server" çalışma mimarisi...


Bu yazıda basit bir şekilde "Web Server" nasıl çalıştığından bahsetmeye çalıştık. Basitte olsa bir temel oluşturmuş olduk. Diğer yazılarda işin daha da derinine ineceğiz ve işler biraz daha karmaşıklaşacak. Burada anlamadığınız bir nokta varsa kesinlikle sormanızı bekliyorum.

       
     
 
 
Gönderilme Tarihi: 26 Eylül 2023 00:11:24 - Kayıtlı IP
  Mesajı İhbar Et!     

İsfihan

Co (Administrator)

C-Warz
19 Kasım 2021
369 Mesaj

Durum: Melodrama


Aktiflik
Seviye
Deneyim


Görev Org./Grup :

Strateji


İlmine sağlık kardeşim. Gayet güzel bir konu 


___________________________________________
Sözünü tutamayan bizler bedelini ödemek zorundayız.
          
  C-WarZ (TIM LiDERi) , Yöneteam , Errorle Mücadele ,    
 
 
Gönderilme Tarihi: 26 Eylül 2023 01:27:01 - Kayıtlı IP
  Mesajı İhbar Et!     

Börteçine

Kuvvet Komutanı

Tarafından
17 Ocak 2022
63 Mesaj

Durum: KETUM


Aktiflik
Seviye
Deneyim
Member Manager

Görev Org./Grup :

Lojistik


Eline sağlık güzel bir konu olmuş. Serinin devamını bekliyoruz


___________________________________________
Koca Hestiy Aya Bedenem{!}
       
  Errorle Mücadele , Lojistik Destek (TIM LiDERi) , Yöneteam , Trial Mods (TIM LiDERi) , C-WarZ ,    
 
 
Gönderilme Tarihi: 26 Eylül 2023 12:51:50 - Kayıtlı IP
  Mesajı İhbar Et!     

Aleph

General

14 Aralık 2021
150 Mesaj




Aktiflik
Seviye
Deneyim
Member Manager

Görev Org./Grup :

Sosyal Medya

Uzmanlık Alanları:
SMM



___________________________________________
Sabır ver, asil asker hainlere göğüs ger.
       
  Yöneteam , Yeni Üyeler TIM (TIM LiDERi) ,    
 
 
Gönderilme Tarihi: 26 Eylül 2023 13:57:24 - Kayıtlı IP
  Mesajı İhbar Et!     

Balerion
Balerion the Black Dread

Albay

İstanbul
26 Ocak 2022
81 Mesaj

Durum: Öğreniyor


Aktiflik
Seviye
Deneyim



Ellerine emeğeine sağlık hocam, çok değerli konular bunlar. Bu konular balık vermez, balık tutmayı öğretir. 


___________________________________________
Elimizden Geldikçe, Dilimiz Döndükçe.
       
  Yeni Üyeler TIM ,    
 
 
Gönderilme Tarihi: 26 Eylül 2023 15:44:02 - Kayıtlı IP
  Mesajı İhbar Et!     

EmreZeriX

Komodor

/public_html
14 Aralık 2021
104 Mesaj

Durum: Yorgun


Aktiflik
Seviye
Deneyim
Moderatör

Görev Org./Grup :

Sosyal Medya


Lojistik

Uzmanlık Alanları:
BD Script
AI Researcher

Bilgi apayrı bir derece gerçekten konu yazan ellerinize sağlık 


___________________________________________

          
     
 
 
Gönderilme Tarihi: 26 Eylül 2023 15:45:11 - Kayıtlı IP
  Mesajı İhbar Et!     

EmreZeriX

Komodor

/public_html
14 Aralık 2021
104 Mesaj

Durum: Yorgun


Aktiflik
Seviye
Deneyim
Moderatör

Görev Org./Grup :

Sosyal Medya


Lojistik

Uzmanlık Alanları:
BD Script
AI Researcher

Bilgi apayrı birşey gerçekten ellerinize sağlık 


___________________________________________

          
     
 
 
[ 1 ]   2
 
Git:
  Arkadaşına yolla

Sayfa Yüklenme Süresi: 0.0634


 

İçerik Yöneticisi : AKTIF / Veriler Aktarıldı...
IP Adresiniz : 172.70.100.94 Güvenlik Nedeniyle Kayıt Altındadır.



Uzun yoldan geldik, uzun yola devam...

   


Reklam vermek için tıklayın

Forum Kuralları | Üye Olmak İçin | CyberAkademi | Operasyonel TİM'ler
CYBERAKADEMI ~ 2021