HTTP istemci
- C++ kursu
- İleri seviye
- Ders 59/83
- 5 dk
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
#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
#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
std::string request = "____ / HTTP/1.1\r
Host: " + host + "\r
Connection: close\r
\r
";
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.