pub struct HttpClient { /* private fields */ }
Expand description

HTTP 客户端

用于发送 HTTP 请求的入口。

其中 HTTP 请求将由 HttpCaller 实现的实例来发送,如果不指定,默认通过当前启用的功能来判定。

私有云获取当前账户的 Buckets 列表

阻塞代码示例
use qiniu_credential::Credential;
use qiniu_http_client::{Authorization, HttpClient, Region, RegionsProviderEndpoints, ServiceName};

let region = Region::builder("z0")
    .add_uc_preferred_endpoint("uc-qos.pocdemo.qiniu.io".parse()?)
    .build();
let credential = Credential::new("abcdefghklmnopq", "1234567890");
let bucket_names: Vec<String> = HttpClient::default()
    .get(&[ServiceName::Uc], RegionsProviderEndpoints::new(region))
    .use_https(false)
    .authorization(Authorization::v2(credential))
    .accept_json()
    .path("/buckets")
    .call()?
    .parse_json()?
    .into_body();
异步代码示例
use qiniu_credential::Credential;
use qiniu_http_client::{Authorization, HttpClient, Region, RegionsProviderEndpoints, ServiceName};

let region = Region::builder("z0")
    .add_uc_preferred_endpoint("uc-qos.pocdemo.qiniu.io".parse()?)
    .build();
let credential = Credential::new("abcdefghklmnopq", "1234567890");
let bucket_names: Vec<String> = HttpClient::default()
    .async_get(&[ServiceName::Uc], RegionsProviderEndpoints::new(region))
    .use_https(false)
    .authorization(Authorization::v2(credential))
    .accept_json()
    .path("/buckets")
    .call()
    .await?
    .parse_json()
    .await?
    .into_body();

Implementations§

Available on crate feature ureq only.

创建一个新的 HTTP 客户端,使用 crate::ureq::Client 作为 HttpCaller 实现

Available on crate feature isahc only.

创建一个新的 HTTP 客户端,使用 crate::isahc::Client 作为 HttpCaller 实现

Available on crate feature reqwest only.

创建一个新的 HTTP 客户端,使用 crate::reqwest::SyncClient 作为 HttpCaller 实现

Available on crate features reqwest and async only.

创建一个新的 HTTP 客户端,使用 crate::reqwest::AsyncClient 作为 HttpCaller 实现

创建一个新的 HTTP 客户端,根据当前环境变量选择 HttpCaller 实现

Examples found in repository?
src/regions/regions_provider/all_regions_provider.rs (line 148)
147
148
149
    pub fn use_https(self, use_https: bool) -> Self {
        self.http_client(HttpClient::build_default().use_https(use_https).build())
    }
More examples
Hide additional examples
src/regions/endpoints_provider/bucket_domains_provider.rs (line 147)
146
147
148
    pub fn use_https(&mut self, use_https: bool) -> &mut Self {
        self.http_client(HttpClient::build_default().use_https(use_https).build())
    }
src/regions/regions_provider/bucket_regions_queryer.rs (line 159)
158
159
160
    pub fn use_https(&mut self, use_https: bool) -> &mut Self {
        self.http_client(HttpClient::build_default().use_https(use_https).build())
    }
Available on crate feature ureq only.

创建一个新的 HTTP 客户端构建器,使用 crate::ureq::Client 作为 HttpCaller 实现

Examples found in repository?
src/client/http_client.rs (line 115)
114
115
116
    pub fn ureq() -> Self {
        Self::build_ureq().build()
    }
Available on crate feature isahc only.

创建一个新的 HTTP 客户端构建器,使用 crate::isahc::Client 作为 HttpCaller 实现

Examples found in repository?
src/client/http_client.rs (line 123)
122
123
124
    pub fn isahc() -> Result<Self, IsahcError> {
        Ok(Self::build_isahc()?.build())
    }
Available on crate feature reqwest only.

创建一个新的 HTTP 客户端构建器,使用 crate::reqwest::SyncClient 作为 HttpCaller 实现

Examples found in repository?
src/client/http_client.rs (line 131)
130
131
132
    pub fn reqwest_sync() -> Self {
        Self::build_reqwest_sync().build()
    }
Available on crate features reqwest and async only.

创建一个新的 HTTP 客户端构建器,使用 crate::reqwest::AsyncClient 作为 HttpCaller 实现

Examples found in repository?
src/client/http_client.rs (line 139)
138
139
140
    pub fn reqwest_async() -> Self {
        Self::build_reqwest_async().build()
    }

创建一个新的 HTTP 客户端,需要指定 HttpCaller 实现

创建一个新的 HTTP 客户端构建器,需要指定 HttpCaller 实现

创建 GET 请求的请求构建器

该方法的异步版本为 HttpClient::async_get

Examples found in repository?
src/regions/regions_provider/all_regions_provider.rs (line 260)
257
258
259
260
261
262
263
264
265
266
267
        fn do_sync_query(&self) -> ApiResult<GotRegions> {
            handle_response_body(
                self.http_client
                    .get(&[ServiceName::Uc], &self.uc_endpoints)
                    .path("/regions")
                    .authorization(Authorization::v2(&self.credential_provider))
                    .accept_json()
                    .call()?
                    .parse_json::<ResponseBody>()?,
            )
        }
More examples
Hide additional examples
src/regions/regions_provider/bucket_regions_queryer.rs (line 290)
286
287
288
289
290
291
292
293
294
295
296
297
298
    fn do_sync_query(&self) -> ApiResult<GotRegions> {
        handle_response_body(
            self.queryer
                .http_client
                .get(&[ServiceName::Uc, ServiceName::Api], &self.queryer.uc_endpoints)
                .path("/v4/query")
                .append_query_pair("ak", self.access_key.as_str())
                .append_query_pair("bucket", self.bucket_name.as_str())
                .accept_json()
                .call()?
                .parse_json::<ResponseBody>()?,
        )
    }
src/regions/endpoints_provider/bucket_domains_provider.rs (line 276)
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
    fn do_sync_query(&self) -> ApiResult<Endpoints> {
        let endpoints: Endpoints = self
            .queryer
            .http_client
            .get(&[ServiceName::Uc], &self.queryer.uc_endpoints)
            .path("/v2/domains")
            .authorization(Authorization::v2(&self.credential))
            .append_query_pair("tbl", self.bucket_name.as_str())
            .accept_json()
            .call()?
            .parse_json::<Vec<String>>()?
            .into_body()
            .into_iter()
            .map(Endpoint::from)
            .collect();
        Ok(endpoints)
    }

创建 POST 请求的请求构建器

该方法的异步版本为 HttpClient::async_post

创建 PUT 请求的请求构建器

该方法的异步版本为 HttpClient::async_put

创建 DELETE 请求的请求构建器

该方法的异步版本为 HttpClient::async_delete

创建请求的请求构建器

该方法的异步版本为 HttpClient::new_async_request

Examples found in repository?
src/client/http_client.rs (line 201)
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
    pub fn get<'r, E: EndpointsProvider + 'r>(
        &'r self,
        service_names: &'r [ServiceName],
        endpoints_provider: E,
    ) -> SyncRequestBuilder<'r, E> {
        self.new_request(Method::GET, service_names, endpoints_provider)
    }

    /// 创建 POST 请求的请求构建器
    ///
    /// 该方法的异步版本为 [`HttpClient::async_post`]。
    #[inline]
    pub fn post<'r, E: EndpointsProvider + 'r>(
        &'r self,
        service_names: &'r [ServiceName],
        endpoints_provider: E,
    ) -> SyncRequestBuilder<'r, E> {
        self.new_request(Method::POST, service_names, endpoints_provider)
    }

    /// 创建 PUT 请求的请求构建器
    ///
    /// 该方法的异步版本为 [`HttpClient::async_put`]。
    #[inline]
    pub fn put<'r, E: EndpointsProvider + 'r>(
        &'r self,
        service_names: &'r [ServiceName],
        endpoints_provider: E,
    ) -> SyncRequestBuilder<'r, E> {
        self.new_request(Method::PUT, service_names, endpoints_provider)
    }

    /// 创建 DELETE 请求的请求构建器
    ///
    /// 该方法的异步版本为 [`HttpClient::async_delete`]。
    #[inline]
    pub fn delete<'r, E: EndpointsProvider + 'r>(
        &'r self,
        service_names: &'r [ServiceName],
        endpoints_provider: E,
    ) -> SyncRequestBuilder<'r, E> {
        self.new_request(Method::DELETE, service_names, endpoints_provider)
    }
Available on crate feature async only.

创建 GET 请求的异步请求构建器

Examples found in repository?
src/regions/regions_provider/all_regions_provider.rs (line 273)
270
271
272
273
274
275
276
277
278
279
280
281
282
        async fn do_async_query(&self) -> ApiResult<GotRegions> {
            handle_response_body(
                self.http_client
                    .async_get(&[ServiceName::Uc], &self.uc_endpoints)
                    .path("/regions")
                    .authorization(Authorization::v2(&self.credential_provider))
                    .accept_json()
                    .call()
                    .await?
                    .parse_json::<ResponseBody>()
                    .await?,
            )
        }
More examples
Hide additional examples
src/regions/regions_provider/bucket_regions_queryer.rs (line 305)
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
    async fn do_async_query(&self) -> ApiResult<GotRegions> {
        handle_response_body(
            self.queryer
                .http_client
                .async_get(&[ServiceName::Uc, ServiceName::Api], &self.queryer.uc_endpoints)
                .path("/v4/query")
                .append_query_pair("ak", self.access_key.as_str())
                .append_query_pair("bucket", self.bucket_name.as_str())
                .accept_json()
                .call()
                .await?
                .parse_json::<ResponseBody>()
                .await?,
        )
    }
src/regions/endpoints_provider/bucket_domains_provider.rs (line 295)
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
    async fn do_async_query(&self) -> ApiResult<Endpoints> {
        let endpoints: Endpoints = self
            .queryer
            .http_client
            .async_get(&[ServiceName::Uc], &self.queryer.uc_endpoints)
            .path("/v2/domains")
            .authorization(Authorization::v2(&self.credential))
            .append_query_pair("tbl", self.bucket_name.as_str())
            .accept_json()
            .call()
            .await?
            .parse_json::<Vec<String>>()
            .await?
            .into_body()
            .into_iter()
            .map(Endpoint::from)
            .collect();
        Ok(endpoints)
    }
source

pub fn async_post<'r, E: EndpointsProvider + 'r>(
    &'r self,
    service_names: &'r [ServiceName],
    endpoints_provider: E
) -> AsyncRequestBuilder<'r, E>

Available on crate feature async only.

创建 POST 请求的异步请求构建器

Available on crate feature async only.

创建 PUT 请求的异步请求构建器

Available on crate feature async only.

创建 DELETE 请求的异步请求构建器

创建异步请求的请求构建器

Examples found in repository?
src/client/http_client.rs (line 262)
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
    pub fn async_get<'r, E: EndpointsProvider + 'r>(
        &'r self,
        service_names: &'r [ServiceName],
        endpoints_provider: E,
    ) -> AsyncRequestBuilder<'r, E> {
        self.new_async_request(Method::GET, service_names, endpoints_provider)
    }

    /// 创建 POST 请求的异步请求构建器
    #[inline]
    #[cfg(feature = "async")]
    #[cfg_attr(feature = "docs", doc(cfg(feature = "async")))]
    pub fn async_post<'r, E: EndpointsProvider + 'r>(
        &'r self,
        service_names: &'r [ServiceName],
        endpoints_provider: E,
    ) -> AsyncRequestBuilder<'r, E> {
        self.new_async_request(Method::POST, service_names, endpoints_provider)
    }

    /// 创建 PUT 请求的异步请求构建器
    #[inline]
    #[cfg(feature = "async")]
    #[cfg_attr(feature = "docs", doc(cfg(feature = "async")))]
    pub fn async_put<'r, E: EndpointsProvider + 'r>(
        &'r self,
        service_names: &'r [ServiceName],
        endpoints_provider: E,
    ) -> AsyncRequestBuilder<'r, E> {
        self.new_async_request(Method::PUT, service_names, endpoints_provider)
    }

    /// 创建 DELETE 请求的异步请求构建器
    #[inline]
    #[cfg(feature = "async")]
    #[cfg_attr(feature = "docs", doc(cfg(feature = "async")))]
    pub fn async_delete<'r, E: EndpointsProvider + 'r>(
        &'r self,
        service_names: &'r [ServiceName],
        endpoints_provider: E,
    ) -> AsyncRequestBuilder<'r, E> {
        self.new_async_request(Method::DELETE, service_names, endpoints_provider)
    }

获得默认的 HttpCaller 实例

默认通过当前启用的功能来判定

获得默认的 Resolver 实例

默认通过当前启用的功能来判定,并使用 CachedResolverShuffledResolver 对其进行包装。

获得默认的 Chooser 实例

默认使用 SubnetChooser,并使用 ShuffledChooserNeverEmptyHandedChooser 对其进行包装。

获得默认的 RequestRetrier 实例

默认使用 ErrorRetrier,并使用 LimitedRetrier 对其进行包装。

获得默认的 Backoff 实例

默认使用 ExponentialBackoff,并使用 LimitedBackoffRandomizedBackoff 对其进行包装。

Trait Implementations§

Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more
Converts self into T using Into<T>. Read more

Returns the argument unchanged.

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Pipes by value. This is generally the method you want to use. Read more
Borrows self and passes that borrow into the pipe function. Read more
Mutably borrows self and passes that borrow into the pipe function. Read more
Borrows self, then passes self.borrow() into the pipe function. Read more
Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Borrows self, then passes self.as_ref() into the pipe function.
Mutably borrows self, then passes self.as_mut() into the pipe function.
Borrows self, then passes self.deref() into the pipe function.
Mutably borrows self, then passes self.deref_mut() into the pipe function.
Should always be Self
Immutable access to a value. Read more
Mutable access to a value. Read more
Immutable access to the Borrow<B> of a value. Read more
Mutable access to the BorrowMut<B> of a value. Read more
Immutable access to the AsRef<R> view of a value. Read more
Mutable access to the AsMut<R> view of a value. Read more
Immutable access to the Deref::Target of a value. Read more
Mutable access to the Deref::Target of a value. Read more
Calls .tap() only in debug builds, and is erased in release builds.
Calls .tap_mut() only in debug builds, and is erased in release builds.
Calls .tap_borrow() only in debug builds, and is erased in release builds.
Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Calls .tap_ref() only in debug builds, and is erased in release builds.
Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Calls .tap_deref() only in debug builds, and is erased in release builds.
Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
Uses borrowed data to replace owned data, usually by cloning. Read more
Attempts to convert self into T using TryInto<T>. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more