HELLO, I’M SERHAT AND THIS IS MY FANCY TITLE.

Python - HTTP çağrıları ve urllib

Bir metin belgesinde kayıtlı olan tüm URL'leri çağırmak için ufak bir betik yazdım. Betik şöyle davranıyor:

  • Kullanıcı dosya yolunu hatalı girerse ufak düzeltmeler yapıyor.
  • Gerçekten öyle bir dosya olup olmadığını kontrol ederek IO.Error'a düşmüyor.
  • HTTPError ve URLError durumlarını ayıklıyor.
  • urllib.request ile HTTP çağrıları yapıyor.

İlerde bunu belki Requests'e çeviririm. Şimdilik betik şöyle:

#!/usr/bin/env python3.2

import os.path, urllib.request
from sys import exit
from time import sleep

# Hatalı girilen dosya yolunu düzelt
try:
    yer = input("Dosyanın konumu: ").strip()
    dosya_adi = input("Dosyanın ismi: ").strip()
    if yer[0] == "/" and yer[-1] == "/":
        yol = yer + dosya_adi
    elif yer[0] != "/" and yer[-1] == "/":
        yol = "/" + yer + dosya_adi
    elif yer[0] == "/" and yer[-1] != "/":
        yol = yer + "/" + dosya_adi
    elif yer[0] != "/" and yer[-1] != "/":
        yol = "/" + yer + "/" + dosya_adi
    else:
        print("Böyle şeyler olmazdı ama...")
except (IndexError, ValueError):
    exit("Dosya yolunda bir hata var!")

# Gerçekten böyle bir dosya var mı?
try:
    if os.path.isfile(yol):
        dosya = open(yol, 'r+')
    else:
        exit("Böyle bir dosya bulunamadı")
except IOError:
    exit("Dosya okunamadı!")

# Bağlantı kur ve URL'leri aç
try:
    for i in dosya.readlines():
        yanit = urllib.request.urlopen(i)
        print("YANIT:", yanit, "\nURL  :", yanit.geturl(), "\n")
        sleep(1)
except urllib.request.HTTPError as baglantihatasi:
    print("Bağlantı kurulamadı! Hata kodu:", baglantihatasi.code)
    exit()
except urllib.request.URLError as urlhatasi:
    print("Bağlantı kurulamadı! Sebep:", urlhatasi.reason)
    exit()
except ValueError as urlhatali:
    exit("Bu bir URL değil!")

Ayrıca gist hesabım üzerinden de indirebeilirsiniz.

Başarılar.


Share this post!


Blog Comments powered by Disqus.