HTTP, uzak sunucularla iletişim kurmak için inanılmaz derecede popüler bir yöntemdir. Süreci basitleştirmeye yardımcı olması için bu mükemmel Rust kitaplığını kullanın.

Çoğu programlama dilinde olduğu gibi, HTTP üzerinden veri göndermek ve almak için Rust'u kullanabilirsiniz. Web tabanlı bir hizmet oluştururken, genellikle bir veya daha fazla hizmeti entegre etmeniz gerekir. Bunu genellikle onlara HTTP istekleri göndererek yaparsınız.

Rust, HTTP işlemleri için yerleşik işlevselliğe sahiptir. Ayrıca Rust ekosisteminde, HTTP ile etkileşime girmenize ve HTTP hizmetleri oluşturmanıza yardımcı olan birçok kitaplık vardır.

Rust ile HTTP İstekleri Yapma

Aşağıdakiler de dahil olmak üzere HTTP istekleri yapmak için çeşitli Rust kitaplıkları mevcuttur. İstek, Aşırı, Ve Sörf kitaplıklar. Reqwest, Rust geliştiricileri arasında en popüler olanıdır.

Reqwest, HTTP istekleri yapmak için basit ve kullanışlı bir API sağlayan üst düzey bir istemci kitaplığıdır. Reqwest, istek göndermek ve yanıtları ve hataları işlemek için işlevsellik sağlar. Bir HTTP isteğinde bulunmanın arkasındaki birçok ayrıntıyı soyutlar ve aşağıdakileri kullanarak eşzamansız istekler gibi gelişmiş özellikleri destekler:

instagram viewer
tokio Çalışma süresi. Ayrıca JSON serisini kaldırma, HTTP üstbilgileri, bağlantı zaman aşımları ve SSL ayarlarını da yönetir.

Rust'ta yeniyseniz veya HTTP hizmetlerinde deneyiminiz yoksa Reqwest kitaplığını kullanışlı bulacaksınız.

Reqwest ile başlamak için Reqwest'i ekleyin ve Tokyo projenizin bağımlılıklarına kütüphaneler. Tokio, Reqwest ile birlikte çalışan eşzamansız bir çalışma zamanı kitaplığıdır. Bu bağımlılıkları Kargo.toml bir Rust projesi oluşturduktan sonra dosya.

[bağımlılıklar]
tokio = { sürüm = "1.15", özellikler = ["tam dolu"] }
istek batı = { sürüm = "0.11", özellikler = ["json"] }

Reqwest ve Tokio kitaplıklarını projenizin bağımlılıklarına ekledikten sonra, programınızı oluşturduğunuzda Cargo bunları kuracaktır.

Reqwest ile HTTP GET İstekleri

Bir web sunucusundan veri almak için GET istekleri yapacaksınız. GET istekleri HTML sayfalarını, JSON verilerini veya resimler veya videolar gibi ikili dosyalar.

Reqwest, istek için sorgu parametreleri ve başlıklarıyla birlikte URL uç noktasını bir dize olarak belirtmenize olanak tanır.

Bir URL'ye HTTP GET isteğini şu şekilde gönderebilirsiniz:

kullanmak istek:: Hata;

zaman uyumsuzfnget_request() -> Sonuç {
izin vermek yanıt = istek:: al(" https://www.example.com").beklemek?;
yazdır!("Durum: {}", yanıt.durum());

izin vermek gövde = yanıt.metin().beklemek?;
yazdır!("Gövde:\n{}", vücut);

Tamam(())
}

#[tokio:: ana]
zaman uyumsuzfnana() -> Sonuç {
get_request().beklemek?;
Tamam(())
}

Bu kod, eşzamansız bir işlevi tanımlar, get_request, example.com'a yapılan bir istekten yanıt ayrıntılarını yazdırmak için. çağırır istek batı modülün elde etmek yöntemini yazdırır ve yanıtın durum kodu Ve beden.

İşte aramanın sonucu get_request işlevi ana işlev:

Reqwest ile HTTP Hatalarını Ele Alma

Ortaya çıktıklarında HTTP isteklerindeki hataları işlemeniz gerekir. Reqwest kütüphanesi, Hata hataları işlemek için kullanabileceğiniz bir tür. Ek olarak, web sunucusundan gelen HTTP durum kodları, isteğin durumu hakkında bilgi sağlayabilir.

Reqwest ile istekleriniz için HTTP hatalarını şu şekilde halledebilirsiniz:

kullanmak istek:: Hata;

zaman uyumsuzfnsap_hata() -> Sonuç {
izin vermek yanıt = istek:: al(" https://www.example.com").beklemek?;

kibrit yanıt.status().as_u16() {
200..=299 => {
izin vermek gövde = yanıt.metin().beklemek?;
yazdır!("Başarı! Gövde:\n{}", vücut);
}
400..=599 => {
izin vermek durum = yanıt.status();
izin vermek error_message = yanıt.metin().beklemek?;
yazdır!("Hata {}: {}", durum, hata_mesajı);
}
_ => {
yazdır!("Beklenmeyen durum kodu: {}", yanıt.durum());
}
}

Tamam(())
}

#[tokio:: ana]
zaman uyumsuzfnana() -> Sonuç {
handle_error().beklemek?;
Tamam(())
}

bu sap_hata işlevi bir GET isteği yapar örnek.comve match deyimi, yanıt durum koduna dayalı olarak tüm hataları işler.

İşlev, sunucunun yanıtına bağlı olarak bir mesaj ve durum kodu yazdırır.

Reqwest ile HTTP POST İstekleri Gönderme

Verileri bir sunucuya göndermek için HTTP POST istekleri yapacaksınız. kullanarak yapabilirsiniz. istek:: İstemci bir istemci oluşturan ve kullanan yapı istek:: RequestBuilder isteği oluşturmak için yapı.

POST isteğini şu şekilde yapabilirsiniz: HTTPbin'in POST isteği bitiş noktası Reqwest ile:

kullanmak reqwest::{İstemci, Hata};

zaman uyumsuzfnYapışkan kağıt() -> Sonuç {
izin vermek url = " https://httpbin.org/post";
izin vermek json_data = r#"{"name": "John Doe", "email": "john.doe@example.com"}"#;

izin vermek client = reqwest:: Client:: new();

izin vermek yanıt = müşteri
.post (url)
.başlık("İçerik türü", "uygulama/json")
.body (json_data.to_wed())
.Göndermek()
.beklemek?;

yazdır!("Durum: {}", yanıt.durum());

izin vermek yanıt_vücudu = yanıt.metin().beklemek?;
yazdır!("Yanıt gövdesi:\n{}", yanıt_vücut);

Tamam(())
}

#[tokio:: ana]
zaman uyumsuzfnana() -> Sonuç {
Yapışkan kağıt().beklemek?;
Tamam(())
}

bu json_data değişkeni istek için JSON verilerini tanımlar ve müşteri değişken bir istek:: İstemci POST isteği için örnek.

bu cevap değişken, POST istek oluşturucusudur. bu postalamak yöntemi, POST isteğini URL'ye gönderir ve başlık yöntemi bir HTTP başlığı ayarlar. bu vücut yöntem, istek gövdesini ayarlar ve Göndermek yöntem isteği gönderir.

bu Yapışkan kağıt işlevi, yanıt durum kodunu ve gövdesini kullanarak konsola yazdırır. yazdır! makro:

Başlıkları ve Sorgu Parametrelerini İşleme HTTP İstekleriniz

Başlıkları ve sorgu parametrelerini işlemek, HTTP istekleri yapmanın önemli bir yönüdür. Başlıklar, kimlik doğrulama bilgileri veya istenen içerikle ilgili meta veriler gibi ek bilgiler içerir.

Sunucunun bir yanıtı filtrelemesi veya değiştirmesi için bir URL'ye ek bilgi eklemek üzere sorgu parametrelerini kullanacaksınız.

Başlıkları ve sorgu parametrelerini işlemek, gönderi isteklerini göndermeye benzer bir süreci takip eder. Reqwest ile HTTP isteklerinizdeki başlıkları ve sorgu parametrelerini şu şekilde işleyebilirsiniz:

kullanmak std:: koleksiyonlar:: HashMap;
kullanmak reqwest::{ Hata, başlık};

#[tokio:: ana]
zaman uyumsuzfnana() -> Sonuç {
headers_for_requests().beklemek?;
Tamam(())
}

zaman uyumsuzfnheaders_for_requests() -> Sonuç {
// İstek için URL'yi ve başlıkları ayarlayın
izin vermek url = " https://example.com/api";
izin vermekmut başlıklar = başlık:: BaşlıkMap:: yeni();
headers.insert (header:: USER_AGENT, header:: HeaderValue:: from_static("istek"));
headers.insert (header:: CONTENT_TYPE, header:: HeaderValue:: from_static("uygulama/json"));

// İstek için sorgu parametrelerini ayarla
izin vermekmut params = HashMap:: yeni();
parametreler.insert("foo", "çubuk");
parametreler.insert("baz", "qux");

// istekte bulun
izin vermek yanıt = talep:: İstemci:: yeni()
.get (url)
.headers (başlıklar)
.query(&params)
.Göndermek()
.beklemek?;

// Yanıtı işle
yazdır!("{:#?}", cevap);

Tamam(())
}

Daha sonra ileteceğiniz sorgu parametreleri için bir hashmap oluşturacaksınız. sorgu yöntem. örneğini oluşturun başlık:: Başlık Haritası başlık eklemek için yazın.

bu headers_for_requests işlevi bir GET isteği gönderir örnek.com birden fazla başlık ve sorgu parametresi ile. Bu kullanır başlıklar Ve sorgu Sırasıyla başlıkları ve sorgu parametrelerini içeren haritaları alan yöntemler.

WASM ile Rust'ta Full Stack WebApp Oluşturabilirsiniz

HTTP isteklerinde bulunmak, diğer uygulamalardan işlevselliği entegre eden karmaşık uygulamalar oluşturmak için kullanışlı bir beceridir.

Mükemmel geliştirme deneyimi için karmaşıklıkları soyutlayan Percy, Yew ve Sycamore gibi kitaplıklarla Rust'ta tam yığın web uygulamaları oluşturabilirsiniz.