Pythontr

husonet | Tarih: 02.01.2025

python urllib2 kütüphanesi ile post kullanımı

python urllib2 kütüphanesi ile post kullanımı

Python’da HTTP isteklerini gerçekleştirmek için kullanılan en popüler kütüphanelerden biri, Python 2 sürümlerinde, urllib2 kütüphanesidir.

Python’da HTTP isteklerini gerçekleştirmek için kullanılan en popüler kütüphanelerden biri, özellikle Python 2 sürümlerinde, urllib2 kütüphanesidir. Her ne kadar Python 3’te bu kütüphanenin adı ve kullanımı değişmiş olsa da (yani urllib.request), hâlâ eski sürümlerle çalışan projelerde urllib2 kullanmanız gerekebilir. Bu yazıda, urllib2 kütüphanesiyle nasıl POST isteği gönderebileceğinizi adım adım inceleyeceğiz.


1. urllib2 Kütüphanesine Giriş

urllib2, Python 2’de yer alan ve HTTP(S) isteklerini yönetmenize imkân tanıyan bir kütüphanedir. Basitçe:

  • Sunucuya GET veya POST gibi HTTP istekleri gönderebilir,
  • Gelen yanıtı (response) okuyabilir,
  • Header bilgilerini düzenleyebilir.

Temel kullanım mantığı, bir Request (İstek) nesnesi oluşturmak ve bunu urlopen fonksiyonuna göndermek şeklindedir.


2. Basit Bir POST İsteği Nasıl Hazırlanır?

POST isteğini göndermek için şu adımları izleriz:

  • Göndermek istediğimiz verileri bir sözlük (dictionary) formunda tanımlamak.
  • Bu verileri urllib’nin urlencode fonksiyonuyla URL-encoded formata çevirmek.
  • Elde edilen veriyi Request nesnesine, data parametresi olarak eklemek.
  • urlopen ile isteği karşı sunucuya göndermek ve yanıtı almak.

Aşağıdaki örnekte, test adında bir parametre ve "merhaba" adında bir içerik POST edeceğimizi düşünelim.

import urllib
import urllib2

# 1. Göndermek istediğimiz POST verileri (örnek olarak 'test' anahtarının değeri 'merhaba')
post_data = {
'test': 'merhaba'
}

# 2. Sözlüğü URL-encoded formata çeviriyoruz
encoded_data = urllib.urlencode(post_data) # 'test=merhaba' şeklinde bir çıktı üretir

# 3. Request nesnesi oluşturuyoruz
url = "https://www.ornekadres.com/api/deneme" # POST isteğini göndereceğimiz URL
req = urllib2.Request(url, data=encoded_data)

# İsteğe ek header bilgisi eklemek isterseniz:
req.add_header('Content-Type', 'application/x-www-form-urlencoded')
req.add_header('User-Agent', 'Mozilla/5.0')

# 4. İsteği gönderip yanıtı alıyoruz
response = urllib2.urlopen(req)

# Yanıt verisini okuyalım
response_data = response.read()

print(response_data)

Bu şekilde temel bir POST isteğini gerçekleştirdiniz. response.read() ile gelen yanıtın tamamını string (metin) olarak okuyup kullanabilirsiniz.


3. Yanıt (Response) İşleme

Yukarıdaki örnekte response_data, sunucudan gelen cevabın metinsel hâlini tutar. Örneğin sunucudan JSON formatında bir yanıt geliyorsa, bu string’i json modülüyle parse edebilirsiniz:

import json

json_data = json.loads(response_data)
print(json_data)

Bu sayede, sunucunun döndürdüğü JSON içeriğine rahatlıkla erişebilirsiniz.


4. Hata Yönetimi (Error Handling)

urllib2 kullanırken, bazen isteğiniz başarısız olabilir ya da sunucu beklenmedik bir yanıt döndürebilir. Bu durumları yakalamak için try/except blokları kullanabilir ve olası hataları yönetebilirsiniz:

import urllib
import urllib2

post_data = {'test': 'merhaba'}
encoded_data = urllib.urlencode(post_data)
url = "https://www.ornekadres.com/api/yanlis" # Yanlış bir URL örneği

req = urllib2.Request(url, data=encoded_data)

try:
response = urllib2.urlopen(req)
response_data = response.read()
print("Sunucudan gelen yanıt:", response_data)
except urllib2.HTTPError as e:
print("HTTP Hatası Kodu:", e.code)
print("Hata mesajı:", e.read())
except urllib2.URLError as e:
print("Bağlantı hatası:", e.reason)
except Exception as e:
print("Beklenmeyen bir hata oluştu:", str(e))

Burada,

  • HTTPError: Sunucunun 404, 500 gibi HTTP hata kodları döndürmesi durumunda yakalanır.
  • URLError: Sunucuyla bağlantı kurulamadığı durumlarda (örn. DNS hatası).
  • Exception: Diğer herhangi bir beklenmedik durumda devreye girer.


5. Python 3’te Durum

Python 3 ile birlikte urllib2 modülü ayrıştırılmış ve urllib.request, urllib.parse, urllib.error gibi alt modüller hâline getirilmiştir. Dolayısıyla Python 3’te şu şekilde kullanmanız gerekir:


import urllib.request
import urllib.parse

post_data = {'test': 'merhaba'}
encoded_data = urllib.parse.urlencode(post_data).encode('utf-8')

url = "https://www.ornekadres.com/api/deneme"
req = urllib.request.Request(url, data=encoded_data)
req.add_header('Content-Type', 'application/x-www-form-urlencoded')

with urllib.request.urlopen(req) as response:
response_data = response.read().decode('utf-8')
print(response_data)

Eğer hâlâ Python 2 ile çalışıyorsanız, urllib2 sizin için geçerli olmaya devam eder; ancak uzun vadede Python 3’e yükseltmeyi düşünüyorsanız, yukarıdaki yapıya benzer bir kullanım öğrenmeniz faydalı olacaktır.


urllib2, Python 2 sürümünde POST istekleri göndermek ve yanıtları işlemek için yeterli bir kütüphanedir. Güncel projelerde çoğunlukla Python 3 sürümü ve dolayısıyla urllib.request kullanıldığından, eğer projelerinizde Python 2 ile yolunuza devam ediyorsanız, bu temel örnekler işinizi görecektir.

Her ne kadar günümüzde requests gibi daha modern kütüphaneler tercih edilse de (pip install requests), urllib2 kullanan projelerde hâlâ bu bilgiye ihtiyaç duyulabiliyor. Umarım bu yazı, urllib2 ile POST isteklerinin nasıl gönderileceğini öğrenme noktasında yardımcı olmuştur.

Eğer aklınıza takılan sorular veya eklemek istedikleriniz varsa, yorumlarda belirtmeyi unutmayın. Keyifli kodlamalar!