1// Copyright (c) 2023 Huawei Device Co., Ltd. 2// Licensed under the Apache License, Version 2.0 (the "License"); 3// you may not use this file except in compliance with the License. 4// You may obtain a copy of the License at 5// 6// http://www.apache.org/licenses/LICENSE-2.0 7// 8// Unless required by applicable law or agreed to in writing, software 9// distributed under the License is distributed on an "AS IS" BASIS, 10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11// See the License for the specific language governing permissions and 12// limitations under the License. 13 14//! This is a simple asynchronous HTTP client example using the 15//! ylong_http_client crate. It demonstrates creating a client, making a 16//! request, and reading the response asynchronously. 17 18use ylong_http_client::async_impl::{Body, Client, Downloader, Request}; 19use ylong_http_client::HttpClientError; 20 21fn main() -> Result<(), HttpClientError> { 22 let handle = ylong_runtime::spawn(async move { 23 client_send().await.unwrap(); 24 }); 25 26 let _ = ylong_runtime::block_on(handle); 27 Ok(()) 28} 29 30async fn client_send() -> Result<(), HttpClientError> { 31 // Creates a `async_impl::Client` 32 let client = Client::new(); 33 34 // Creates a `Request`. 35 let request = Request::builder() 36 .url("https://www.example.com") 37 .body(Body::empty())?; 38 39 // Sends request and receives a `Response`. 40 let response = client.request(request).await?; 41 42 // Reads the body of `Response` by using `BodyReader`. 43 let _ = Downloader::console(response).download().await; 44 Ok(()) 45} 46