C++
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.
Örnek çözümü göster
#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;
}
Kendini test et
-
Parçayı rolüne eşle
- GET
- Veri okuma yöntemi
- POST
- Veri gönderme yöntemi
- Host:
- Sunucu adı başlığı
- \r\n\r\n
- Başlık sonu
-
GET yöntemini tamamla
std::string request = "____ / HTTP/1.1\r
Host: " + host + "\r
Connection: close\r
\r
";
Cevabı göster
std::string request = "GET / HTTP/1.1\r
Host: " + host + "\r
Connection: close\r
\r
";
-
Host başlığı neden gerekli?
- Bağlantıyı hızlandırmak için
- Sunucunun doğru siteyi bulması için
- Yanıtı sıkıştırmak için
- İsteği şifrelemek için
Cevabı göster
Sunucunun doğru siteyi bulması için — Host başlığı, sunucunun hangi siteye yanıt vereceğini belirler.
Sıradaki ders: Özet - Ağ programlama