HTPP bir istek-yanıt protokolüdür. İnternet üzerinde bir uygulamaya gitmek için bir HTTP istek yaparız ve HTTP yanıt alırız. Bu yazıda Restful API üzerinde duracağız. Restful API, HTTP protokolünün bir formudur. Öncelikle API kavramından bahsedelim. API (Application Programming Interface), bir uygulama için oluşturulmuş bazı fonksiyonların, başka uygulamalar tarafından çağrılıp, kullanılabilmesine imkan veren, destekleyen yapılardır. Yazılımların birbirleriyle iletişim kurması için belirlenmiş kod dizisidir. API’leri bu yüzden arayüz gibi düşünebiliriz. Farklı yazılımların etkileşimini ve birbirine bağlanabilmesini sağlar. Peki bu Restful API nedir ?

Restful API

      Restful API , internet üzerindeki uygulamalarda ve bulut iletişiminde yaygın olarak kullanılan, uygulama düzeyinde bir protokoldür. Stateless ve cacheless bir yapıdadır. Yapılan her istek benzersizdir. Gelen önceki ve gelebilecek sonraki istekten etkilenmez ve bağlantısı bulunmaz. İstemci-Sunucu bağımsızlığından ve HTTP ile çalıştığından dolayı uygun herhangi bir programlama dili ile test edilebilmektedir. Restful API’nin yapısı aşağıdaki bileşenlerden oluşur.

1. URL
2. HTTP METHODS
3. HEADERS
4. PARAMETERS
5. DATA

URL

      Uniform Resource Locator, kaynağın bulunduğu ve üzerinden işlemlerin gerçekleştirildiği yoldur. URL, kaynağa doğrudan işaret edebiliyorken, aynı zamanda farklı bir kaynağa veya işleme de yönlendirebilir.

HTTP METHODS

      GET, POST, PUT, DELETE gibi metodlar ile gerçekleştirilen isteklerdir. Daha geniş bilgi için buraya göz atabilirsiniz.

GET

Basit anlamda, kaynaktan veri talep ederken yapılan istektir.

requests.get(url)
POST

      Sunucuya veri gönderip kaynak oluşturmayı hedeflerken kullandığımız HTTP metodudur.

requests.post(url, data=data)	
PUT

      Sunucu üzerinde bulunan kaynağı güncellemeyi sağlayan HTTP metodudur.

requests.put(url, params=params)
DELETE

      Sunucu üzerinden kaynak silmeyi destekleyen yöntemdir.

requests.delete(url)
HEADERS

      İstek ve yanıtların içeriklerini işlemek için kullanılan bilgileri içerir. WEB servisi tarafından desteklenen veri tipleri ile ilgili bilgiler burada yer alır.

{ 'Content-type' : 'text/html' }
PARAMETERS

      URL üzerinde parametre olarak değerlerin gönderildiği durumlar için, yapılan HTTP isteğinin içinde bu bölüm yer alır.

{ 'apikey': api_key, 'resource': hash }
DATA

      İsteğin içinde gönderilecek veriler burada bulunur.

{ 'username' : user, 'password' : passwd }

Virus Total API - Python ile Hash ve URL Arama Örneği

	import requests

	api_key = ''
	hash = '7657fcb7d772448a6d8504e4b20168b8'
	target_url = 'http://www.hakanbayir.com'

	def hash_search():
	    url = 'https://www.virustotal.com/vtapi/v2/file/report'
	    parameters = {'apikey': api_key, 'resource': hash}
	    headers = {"Accept-Encoding": "gzip, deflate"}

	    r = requests.post(url, headers=headers, params=parameters)

	    result = r.json()

	    scanner = result['scans']

	    scanner_count = 1
	    for i in scanner:
		     print scanner_count , " : ", i, " - " , scanner[i] , '\n'
		     scanner_count = scanner_count + 1


	def url_search():
	    url = 'http://www.virustotal.com/vtapi/v2/url/report'
	    parameters = {'apikey' : api_key , 'resource' : target_url}
	    headers = {"Accept-Encoding": "gzip, deflate"}

	    r = requests.post(url, headers=headers, params=parameters)

	    result = r.json()

	    scanner = result['scans']

	    scanner_count = 1
	    for i in scanner:
		     print scanner_count , " : ", i, " - " , scanner[i] , '\n'
		     scanner_count = scanner_count + 1


	if __name__ == '__main__':
	    print "[1]. Hash Search" , "\n"
	    print "[2]. URL Search" , "\n"

	    print "Choose Search Options : "
	    option = raw_input()

	    if option == '1':
		     hash_search()
	    elif option == '2':
		     url_search()
Hash Arama Çıktısı



URL Arama Çıktısı