Python Kullanarak GET ve POST İstekleri

Python Kullanarak GET ve POST İstekleri

Bu gönderide Python'daki iki HTTP (Köprü Metni Aktarım Protokolü) istek yöntemi GET ve POST istekleri ve bunların Python'da uygulanması ele alınmaktadır. 

HTTP nedir?  

HTTP, istemciler ve sunucular arasındaki iletişimi sağlamak için tasarlanmış bir dizi protokoldür. İstemci ile sunucu arasında istek-yanıt protokolü olarak çalışır. Bir web tarayıcısı istemci olabilir ve bir web sitesini barındıran bilgisayardaki bir uygulama, sunucu olabilir. Yani sunucudan yanıt istemek için temel olarak iki yöntem vardır:

  1. ELDE ETMEK : Sunucudan veri istemek için.
  2. POSTALAMAK : İşlenecek verileri sunucuya göndermek için.

GET ve POST yöntemlerinin temel konseptini açıklayan basit bir diyagramı burada bulabilirsiniz.

Python kullanarak GET ve POST istekleri 

 Şimdi HTTP istekleri yapmak için Python aşağıdakiler gibi çeşitli HTTP kütüphanelerini kullanabiliriz:

Yukarıda sıralanan kütüphanelerin en şıkı ve en basiti İsteklerdir. Bu yazıda request kütüphanesini kullanacağız. İstekler kitaplığını indirmek ve yüklemek için aşağıdaki komutu kullanın:

 pip install requests  

Alma isteği oluşturma

Yukarıdaki örnek, Google Haritalar API'sine bir GET isteği göndererek belirli bir konumun enlem boylamını ve biçimlendirilmiş adresini bulur. Bir API'si (Uygulama Programlama Arayüzü), bir programın dahili özelliklerine sınırlı bir şekilde erişmenizi sağlar. Çoğu durumda sağlanan veriler JSON(JavaScript Nesne Gösterimi) biçimindedir (Python'da sözlük nesneleri olarak uygulanır!).

Python
   # importing the requests library   import   requests   # api-endpoint   URL   =   'http://maps.googleapis.com/maps/api/geocode/json'   # location given here   location   =   'delhi technological university'   # defining a params dict for the parameters to be sent to the API   PARAMS   =   {  'address'  :  location  }   # sending get request and saving the response as response object   r   =   requests  .  get  (  url   =   URL     params   =   PARAMS  )   # extracting data in json format   data   =   r  .  json  ()   # extracting latitude longitude and formatted address   # of the first matching location   latitude   =   data  [  'results'  ][  0  ][  'geometry'  ][  'location'  ][  'lat'  ]   longitude   =   data  [  'results'  ][  0  ][  'geometry'  ][  'location'  ][  'lng'  ]   formatted_address   =   data  [  'results'  ][  0  ][  'formatted_address'  ]   # printing the output   print  (  'Latitude:  %s  n  Longitude:  %s  n  Formatted Address:  %s  '   %  (  latitude     longitude    formatted_address  ))   

Çıkış:

Python Kullanarak GET ve POST İstekleri

Çıkarılacak önemli noktalar:

 PARAMS = {'address':location}  

Bir GET isteğinin URL'si genellikle bazı parametreleri kendisiyle birlikte taşır. İstekler için kütüphane parametreleri bir sözlük olarak tanımlanabilir. Bu parametreler daha sonra ayrıştırılır ve temel URL'ye veya API uç noktasına eklenir. Parametrenin rolünü anlamak için yazdırmayı deneyin r.url yanıt nesnesi oluşturulduktan sonra. Bunun gibi bir şey göreceksiniz:

 http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+university  

Bu, GET isteğinin yapıldığı gerçek URL'dir

 r = requests.get(url = URL params = PARAMS)  

Burada istek-yanıtı saklayacak bir yanıt nesnesi 'r' oluşturuyoruz. GET isteği gönderdiğimiz için request.get() yöntemini kullanıyoruz. İlettiğimiz iki argüman URL ve parametreler sözlüğüdür.

 data = r.json()  

Şimdi yanıt nesnesinden veriyi almak için ham yanıt içeriğini JSON tipi bir veri yapısına dönüştürmemiz gerekiyor. Bu, json() yöntemi kullanılarak elde edilir. Son olarak JSON tipi nesneyi ayrıştırarak gerekli bilgileri çıkarıyoruz.

POST isteğinde bulunma

Bu örnek, dosyanızı nasıl yapıştıracağınızı açıklamaktadır. kaynak_kodu ile Pastebin.com PASTEBIN API'sine bir POST isteği göndererek. Öncelikle bir API anahtarı oluşturmanız gerekecek: buradan kayıt oluyorum ve ardından API anahtarı burada.  

Python
   # importing the requests library   import   requests   # defining the api-endpoint   API_ENDPOINT   =   'https://pastebin.com/api/api_post.php'   # your API key here   API_KEY   =   'XXXXXXXXXXXXXXXXX'   # your source code here   source_code   =   '''   print('Hello world!')   a = 1   b = 2   print(a + b)   '''   # data to be sent to api   data   =   {  'api_dev_key'  :   API_KEY     'api_option'  :   'paste'     'api_paste_code'  :   source_code     'api_paste_format'  :   'python'  }   # sending post request and saving response as response object   r   =   requests  .  post  (  url  =  API_ENDPOINT     data  =  data  )   # extracting response text   pastebin_url   =   r  .  text   print  (  'The pastebin URL is:  %s  '   %   pastebin_url  )   

Bu kodun önemli özellikleri:

 data = {'api_dev_key':API_KEY   
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}

Burada yine bazı verileri API sunucusuna aktarmamız gerekecek. Bu verileri sözlük olarak saklıyoruz.

 r = requests.post(url = API_ENDPOINT data = data)  

Burada istek-yanıtı saklayacak bir yanıt nesnesi 'r' oluşturuyoruz. POST isteği gönderdiğimiz için request.post() yöntemini kullanıyoruz. İlettiğimiz iki argüman URL ve veri sözlüğüdür.

 pastebin_url = r.text  

Yanıt olarak sunucu kendisine gönderilen verileri işler ve sizin Pastebin_URL'nizi gönderir. kaynak_kodu tarafından kolayca erişilebilen r.metin.

istekler.post yöntem, Facebook Graph API'sini vb. kullanarak FB zaman çizelgenizde yayınlanan web formlarını doldurmak ve göndermek gibi birçok başka görev için de kullanılabilir. 

İşte üzerinde düşünmeniz gereken bazı önemli noktalar:

  • Yöntem GET olduğunda tüm form verileri URL'ye kodlanır ve URL'ye eklenir. aksiyon Sorgu dizesi parametreleri olarak URL. POST formuyla veriler, mesaj gövdesi HTTP isteğinin.
  • GET yönteminde parametre verileri, istek satırına (URL) doldurabileceklerimizle sınırlıdır. 2K'dan daha az parametre kullanmak en güvenlisidir, bazı sunucular 64K'ya kadar işleyebilir. POST yönteminde böyle bir sorun yoktur çünkü verileri POST yönteminde göndeririz. mesaj gövdesi URL değil, HTTP isteğinin.
  • GET yönteminde gönderilecek veriler için yalnızca ASCII karakterlere izin verilir. POST yönteminde böyle bir kısıtlama yoktur.
  • GET, POST'a kıyasla daha az güvenlidir çünkü gönderilen veriler URL'nin bir parçasıdır. Bu nedenle şifreler veya diğer hassas bilgiler gönderilirken GET yöntemi kullanılmamalıdır.
Test Oluştur