Python ile SOAP İsteği Göndermek

SOAP Nedir?

SOAP, Simple Object Access Protocol’ün kısaltmasıdır ve web servisleri ile iletişim kurmak için kullanılan bir protokoldür. SOAP, istemcilerin sunucularla veri alışverişinde bulunmalarını sağlamak amacıyla XML biçiminde veriler iletmesine olanak tanır. Hem istemci hem de sunucu tarafında belirli bir yapı ve kurallar seti bulunur, bu da SOAP’ın standartlaşmış bir iletişim yöntemi olmasını sağlar. Genellikle dağıtık uygulamalar arasında güvenli ve güvenilir bir şekilde veri iletmek için tercih edilir.

Ayrıca, SOAP, diğer protokollerle birlikte kullanılabilir, ancak temel işlevi, ağ üzerinde veri iletimini kolaylaştırmaktır. SOAP ile veri alışverişi yapmak için, genellikle bir WSDL (Web Services Description Language) dosyasına ihtiyaç duyulur. WSDL, bir web servisinin sunduğu işlevler, bunları nasıl çağıracağınız ve dönecek yanıtların yapısı hakkında bilgi sağlar.

Python ile SOAP İsteği Göndermek

Python’da SOAP isteği göndermek için birkaç farklı kütüphane mevcuttur. En yaygın olanlarından biri ‘zeep’ kütüphanesidir. Bu kütüphane, SOAP servislerine kolay ve etkili bir şekilde erişim sağlar. Zeep, Python 3.x versiyonları ile uyumludur ve kurulumu oldukça basittir. Öncelikle, pip aracılığıyla zeep kütüphanesini yüklememiz gerekiyor:

pip install zeep

Zeep Kütüphanesini Kullanarak SOAP İsteği Göndermek

Zeep ile SOAP isteği göndermek için öncelikle kütüphaneyi import etmemiz gerekiyor. Ardından, bir WSDL dosyasını kullanarak bir istemci oluşturmalıyız. Bu istemci, isteklerinizi SOAP servisine gönderecek ve yanıtları alacaktır. Aşağıdaki örnekte, bir SOAP servisine nasıl istekte bulunacağınızı göstereceğiz:

# Zeep kütüphanesini import ediyoruz
from zeep import Client

# WSDL dosyası ile istemcimizi oluşturuyoruz
def create_soap_client(wsdl_url):
    client = Client(wsdl_url)
    return client

# SOAP isteği göndermek için bir fonksiyon tanımlıyoruz
def call_soap_service(client, method_name, *args):
    response = client.service[method_name](*args)
    return response

# Örnek kullanım
def main():
    wsdl_url = 'http://example.com/service?wsdl'
    client = create_soap_client(wsdl_url)
    response = call_soap_service(client, 'MethodName', 'param1', 'param2')
    print(response)

if __name__ == '__main__':
    main()

Yukarıdaki örnekte, kullanılan WSDL URL’sinin geçerli olduğundan emin olun. Ayrıca, yöntem adı ve parametreler isteğe bağlı değişebilir. SOAP servisine istek gönderdikten sonra dönen yanıtı basmak için console.log veya print işlevini kullanıyoruz.

SOAP İsteğinde Hata Yönetimi

SOAP istekleri sırasında hata almanız durumunda, bu durumun yönetimi önemlidir. SOAP hataları genellikle XML biçiminde döner ve hata türü hakkında bilgi sağlar. Python’da hataları yakalamak için try-except bloklarını kullanabilirsiniz.

def call_soap_service(client, method_name, *args):
    try:
        response = client.service[method_name](*args)
        return response
    except Exception as e:
        print(f'Hata: {e}')
        return None

Yukarıdaki örnekte, eğer SOAP isteği sırasında bir hata oluşursa, hata mesajını basıyoruz. Bu şekilde kullanıcı, olası sorunların ne olduğunu anlamaya çalışabilir.

SOAP Yanıtlarını İşlemek

SOAP servisi ile iletişim kurduğunuzda, yanıt XML formatında dönecektir. Bu yanıtı Python’da işlemek için çeşitli yöntemler mevcut. Zeep ile bu yanıt otomatik olarak Python nesnelerine dönüştürülür. Yani, yanıtı kullanmak için XML yapısını çözümlemekle uğraşmanıza gerek kalmaz. Gelen yanıtı ele almak için basit bir örnek aşağıda verilmiştir:

response = call_soap_service(client, 'MethodName', 'param1', 'param2')
if response:
    # Yanıtın içeriğini işleme
    print(response.attribute_name)

Yukarıdaki kod, SOAP yanıtının bir alt nesne özelliğine erişim sağlamaktadır. SOAP servisi, belirli bir veri modeli ile döneceği için, yanıtın yapısına göre uygun değişkenleri kullanmalısınız. Bu özelliklerin hangi veri yapısına sahip olduğunu anlamak için WSDL dokümantasyonunu gözden geçirmeniz faydalı olacaktır.

SOAP İsteklerinde Güvenlik ve Yetkilendirme

SOAP ile yapılan isteklerde güvenlik oldukça önemlidir. SOAP mesajlarının yetkilendirilmesi için genellikle WS-Security kullanılır. Wsse (Web Services Security) ile güvenlik ek bilgileri SOAP isteğine dahil edilebilir. Örnek olarak, basit bir kullanıcı adı ve şifre ile yetkilendirme eklemek için aşağıdaki şekilde bir yapı oluşturabilirsiniz:

from zeep.plugins import HistoryPlugin
from zeep.transports import Transport

# WS-Security için gerekli bilgiler
username = 'your_username'
password = 'your_password'
security = {'UsernameToken': {'Username': username, 'Password': password}}

# Güvenlik bilgisi eklenmiş istemci oluşturuyoruz
history = HistoryPlugin()
transport = Transport()  # Gerekirse proxy ayarları eklenebilir
client = Client(wsdl_url, transport=transport)
client.set_ns_prefix('wsse', 'http://schemas.xmlsoap.org/ws/2002/12/secext')
client.service.binding_options.update({'wsse:Security': security})

# İstek gönderme
response = call_soap_service(client, 'MethodName', 'param1', 'param2')

Yukarıdaki kodda, bir kullanıcı adı ve şifre ile birlikte güvenlik doğrulaması yapılmaktadır. Elbette ki gerçek projelerinizde bu bilgileri güvenli bir şekilde saklamak için daha sağlam yöntemler geliştirmelisiniz.

Sonuç

Python ile SOAP istekleri oluşturmak oldukça kolaydır. Zeep gibi kütüphaneler, karmaşık XML yapılarıyla uğraşmadan işlemlerinizi kolaylaştırır. Hataları doğru bir şekilde yönetmek, yanıtları etkili bir şekilde işlemek ve güvenli bir iletişim kurmak açısından dikkat edilmesi gereken adımlardır.

Bu makalede SOAP sistemlerinin temellerine ve Python ile SOAP isteği göndermenin yöntemlerine odaklandık. İleri düzeyde SOAP servisleri ile çalışmak isteyenler için daha fazla kaynak ve belgeyi incelemeyi tavsiye ederim. Şimdi kendi projelerinizde SOAP API’leri denemeye başlayabilirsiniz!

Scroll to Top