HTTP Restful API ve Virus Total API (Python)
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()