0Pricing
Lua Academy · Ders

HTTP İstekleri

Web kaynaklarını alın.

HTTP İstekleri, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.

socket.http Modülü

LuaSocket, socket.http içinde yüksek düzeyli bir HTTP istemcisi sunar. Bu istemci ham TCP üzerine kuruludur; ancak istek biçimlendirmesini, üst bilgileri ve parçalı kod çözmeyi sizin için yönetir.

Düz TCP üzerinden HTTP/1.1 konuşur. HTTPS için LuaSec'teki yardımcı ssl.https modülüne ihtiyacınız vardır.

local http = require("socket.http")
print(http.PORT)

Basit Bir GET

En basit biçim bir adres alır ve gövdeyi, durum kodunu, yanıt üst bilgilerini ve durum satırını döndürür.

200 durum kodu başarı anlamına gelir. nil olan bir gövde, HTTP hatasından çok taşıma katmanı düzeyinde bir hataya işaret eder.

local http = require("socket.http")
local body, code, headers = http.request("http://example.com/")
print(code, #body)

Durumu Okuma

Gövdeye güvenmeden önce sayısal code değerini her zaman denetleyin. 404 yine de bir gövde, yani hata sayfası döndürür; bu nedenle çağrı TCP düzeyinde başarılı olmuştur.

Dördüncü dönüş değeri, "HTTP/1.1 200 OK" gibi bir durum satırı dizgesidir ve günlük kaydı için kullanışlıdır.

local body, code, headers, status = http.request(url)
if code == 200 then
  process(body)
else
  print("unexpected:", status)
end

Üst Bilgileri İnceleme

Döndürülen headers tablosunda anahtarlar küçük harfe dönüştürülür; bu nedenle sunucu bunları hangi harf biçimiyle göndermiş olursa olsun headers["content-type"] okursunuz.

Yaygın alanlar arasında content-length, content-type ve yönlendirmeler için location bulunur.

local body, code, headers = http.request(url)
print(headers["content-type"])
print(headers["content-length"])

Genel İstek Biçimi

http.request işlevine bir tablo geçirmek tam denetim sağlar: yöntem, özel üst bilgiler, istek gövdesi kaynağı ve yanıt için bir alıcı belirleyebilirsiniz.

Bu biçim gövdeyi değil, 1 değerini ve bunun yanında kodu, üst bilgileri ve durumu döndürür. Gövdeyi alıcı aracılığıyla kendiniz toplarsınız.

local http = require("socket.http")
local ltn12 = require("ltn12")
local chunks = {}
http.request{
  url = "http://example.com/",
  sink = ltn12.sink.table(chunks)
}

POST Gönderme

POST için method = "POST" ayarlayın, gövdeyi içeren bir source sağlayın ve content-length değerini belirleyin. ltn12.source.string yardımcısı bir Lua dizesini kaynak olarak sarmalar.

content-type değerini, yükünüzle eşleşecek şekilde (örneğin application/json) ayarlayın.

local body = "{\"name\":\"Lua\"}"
http.request{
  url = url,
  method = "POST",
  source = ltn12.source.string(body),
  headers = {
    ["content-type"] = "application/json",
    ["content-length"] = tostring(#body)
  }
}

ltn12 ile Gövdeyi Toplama

LuaSocket verileri ltn12 filtreleri üzerinden akıtır. Bir alıcı parçaları tüketir; ltn12.sink.table(t) bunları bir tabloya ekler ve siz de ardından table.concat ile birleştirirsiniz.

Bu akış modeli, her şeyi tek seferde arabelleğe almak yerine büyük indirmelerde belleği düşük tutar.

local ltn12 = require("ltn12")
local t = {}
http.request{ url = url, sink = ltn12.sink.table(t) }
local full = table.concat(t)

Özel İstek Üst Bilgileri

Kimlik doğrulama, kullanıcı aracıları veya çerezler eklemek için headers tablosunu kullanın. LuaSocket'in beklediği biçime uyması için anahtarlar küçük harfli olmalıdır.

Örneğin sunucunun istemcinizi doğru tanıması için bir taşıyıcı belirteci veya özel bir user-agent gönderin.

http.request{
  url = url,
  headers = {
    ["authorization"] = "Bearer " .. token,
    ["user-agent"] = "lua-client/1.0"
  }
}

Yönlendirmeleri İzleme

Varsayılan olarak socket.http, GET için yönlendirmeleri otomatik olarak izler. İstek tablosunda redirect = false kullanarak bunu devre dışı bırakabilir ve 3xx yanıtını kendiniz inceleyebilirsiniz.

İzleme devre dışı olduğunda sonraki adresi bulmak için headers["location"] değerini okuyun.

local body, code, headers = http.request{
  url = url,
  redirect = false
}
if code == 301 then print("moved to", headers["location"]) end

Zaman Aşımları ve HTTPS

Takılı kalan indirmelerin aksi hâlde sonsuza kadar engellememesi için HTTP çağrıları için http.TIMEOUT = 10 ile genel bir zaman aşımı ayarlayın.

socket.http yalnızca şifrelenmemiş metin kullandığından, https:// adresleri için LuaSec'teki require("ssl.https") modülünü kullanın; API'si socket.http ile aynıdır.

local http = require("socket.http")
http.TIMEOUT = 10
-- for TLS:
local https = require("ssl.https")
local body, code = https.request("https://example.com/")

Hata İşleme

İki hata katmanını birbirinden ayırın. Bir taşıma hatası, "connection refused" veya "timeout" gibi bir hata dizgesiyle birlikte nil döndürür.

Bir uygulama hatası, 4xx veya 5xx koduyla birlikte bir gövde döndürür. Sağlam kod önce nil durumunu denetler, ardından durum koduna göre farklı işlem yapar.

local body, code = http.request(url)
if not body then
  print("transport error:", code)
elseif code >= 400 then
  print("http error:", code)
end

Hızlı Kontrol

http.request işlevinin basit URL biçiminin ne döndürdüğünü hatırlayın.

Özet

socket.http modülünü öğrendiniz: gövde/kod/üst bilgiler döndüren basit GET isteklerini, ltn12 hedefleri ve kaynaklarıyla kullanılan genel tablo biçimini, POST gövdelerini, özel üst bilgileri, yönlendirmeleri ve zaman aşımını incelediniz.

Ayrıca taşıma hatalarını (nil) HTTP durum hatalarından ayırdınız ve HTTPS için LuaSec'in ssl.https öğesinin gerektiğini gördünüz. Böylece ham TCP'den HTTP'ye uzanan ağ iletişimi yolculuğunu tamamladınız.

Sıkça Sorulan Sorular

“HTTP İstekleri” dersi ücretsiz mi?

Evet — “HTTP İstekleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.

“HTTP İstekleri” dersinde ne öğreneceğim?

Web kaynaklarını alın. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Lua Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“HTTP İstekleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. TCP Temelleri
  2. İstemci Oluşturma
  3. Sunucu Oluşturma
  4. HTTP İstekleri
← Lua Academy Sayfasına Dön