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:
- ELDE ETMEK : Sunucudan veri istemek için.
- POSTALAMAK : İşlenecek verileri sunucuya göndermek için.
GET ve POST yöntemlerinin temel konseptini açıklayan basit bir diyagramı burada bulabilirsiniz.
Ş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 requestsAlma 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:%snLongitude:%snFormatted Address:%s' %(latitude longitudeformatted_address))
Çıkış:
Çı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+universityBu, 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.textYanı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.