CodeBlanks Logo Icon CodeBlanks

HTTP istemci

Basit HTTP istemci yazmayı öğrenirsin.

HTTP nedir?

HTTP (HyperText Transfer Protocol), web üzerinde istemci-sunucu iletişimi için kullanılan metin tabanlı bir protokoldür. TCP üzerine kuruludur. Bir istemci bir istek (request) gönderir, sunucu bir yanıt (response) döndürür. İstekler yöntem (method) ile başlar: GET, POST, PUT, DELETE.

Bir GET isteği örneği: GET / HTTP/1.1\r\nHost: example.com\r\n\r\n. İlk satır istek satırıdır (yöntem, yol, sürüm). Ardından başlıklar (headers) gelir, her biri \r\n ile biter. Boş bir satır (\r\n\r\n) başlık sonu anlamına gelir. Yanıt da benzer biçimdedir: HTTP/1.1 200 OK\r\n.... Bu derste istek dizesini oluşturmayı öğreneceğiz.

İstek dizesi oluşturma

Bir HTTP GET isteği, bir dize olarak oluşturulur ve TCP soketi üzerinden gönderilir. İstek satırı, başlıklar ve boş satırdan oluşur. Host başlığı HTTP/1.1'de zorunludur; sunucu adını taşır.

Örnek: std::string host = "example.com"; std::string request = "GET / HTTP/1.1\r\nHost: " + host + "\r\nConnection: close\r\n\r\n";. Burada Connection: close yanıttan sonra bağlantının kapatılmasını ister. Oluşturulan dize send(sock, request.c_str(), request.size(), 0) ile sokete yazılır. Yanıtı okumak için recv kullanılır. Bu derste dize oluşturmaya odaklanacağız; gerçek gönderme sonraki projelerde.

Uygulama HTTP GET isteği oluştur

std::string host = "example.com"; tanımla. std::string request oluştur: "GET / HTTP/1.1\r\nHost: " ile başla, + host + ekle, "\r\nConnection: close\r\n\r\n" ile bitir. std::cout << "İstek hazır"; yaz.

Başlangıç kodu

main.cpp
#include <iostream>
#include <string>

// HTTP GET isteği dizesi oluştur

int main() {
    // request dizesini oluştur ve durum yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <string>

int main() {
    std::string host = "example.com";
    std::string request = "GET / HTTP/1.1\r\nHost: " + host + "\r\nConnection: close\r\n\r\n";
    std::cout << "İstek hazır";
    return 0;
}

Beklenen çıktı

İstek hazır

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Parçayı rolüne eşle

Kavram Anlamı
GET Veri okuma yöntemi
POST Veri gönderme yöntemi
Host: Sunucu adı başlığı
\r\n\r\n Başlık sonu

2 GET yöntemini tamamla

Soru
std::string request = "____ / HTTP/1.1\r
Host: " + host + "\r
Connection: close\r
\r
";
Cevap
std::string request = "GET / HTTP/1.1\r
Host: " + host + "\r
Connection: close\r
\r
";

Açıklama: GET, veri okuma yöntemidir.

3 Host başlığı neden gerekli?

  • Bağlantıyı hızlandırmak için
  • Sunucunun doğru siteyi bulması için Doğru cevap
  • Yanıtı sıkıştırmak için
  • İsteği şifrelemek için

Açıklama: Host başlığı, sunucunun hangi siteye yanıt vereceğini belirler.

İleri seviye bölümündeki tüm dersler