当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Dart HttpClient用法及代码示例


dart:io 库中HttpClient 类的用法介绍如下。

用于与 HTTP 服务器通信的 HTTP 客户端。

向 HTTP 服务器发送 HTTP 请求并接收响应。在对同一服务器的多个请求之间维护状态,包括会话 cookie 和其他 cookie。

注意:HttpClient 提供低级 HTTP 函数。我们建议用户从 package:http 中找到的更多 developer-friendly 和可组合 API 开始。

HttpClient 包含许多将 HttpClientRequest 发送到 Http 服务器并接收回 HttpClientResponse 的方法。例如,您可以分别对 GET 和 POST 请求使用 getgetUrlpostpostUrl 方法。

发出一个简单的 GET 请求:一个例子

getUrl 请求是一个两步过程,由两个 Future 触发。当第一个 future 以 HttpClientRequest 结束时,底层网络连接已经建立,但没有发送数据。在第一个未来的回调函数中,可以在请求上设置 HTTP 标头和正文。第一次写入请求对象或调用close 将请求发送到服务器。

当从服务器接收到 HTTP 响应时,close 返回的第二个 future 以 HttpClientResponse 对象结束。此对象提供对响应的标头和正文的访问。主体可用作由 HttpClientResponse 实现的流。如果存在实体,则必须读取它。否则会导致资源泄露。如果未使用主体,请考虑使用HttpClientResponse.drain

var client = HttpClient();
try {
  HttpClientRequest request = await client.get('localhost', 80, '/file.txt');
  // Optionally set up headers...
  // Optionally write to the request object...
  HttpClientResponse response = await request.close();
  // Process the response
  final stringData = await response.transform(utf8.decoder).join();
  print(stringData);
} finally {
  client.close();
}

HttpClientRequest 的未来是由 getUrlopen 等方法创建的。

HTTPS 连接

HttpClient 可以发出 HTTPS 请求,使用 TLS (SSL) 安全网络协议连接到服务器。如果服务器的证书由 Mozilla 编译的知名受信任 CA 的默认列表上的根 CA(证书颁发机构)签名,则使用 https: 方案调用 getUrl 将自动工作。

要添加自定义受信任的证书颁发机构,或将客户端证书发送到请求证书的服务器,请将 SecurityContext 对象作为可选的 context 参数传递给 HttpClient 构造函数。可以在SecurityContext 对象上设置所需的安全选项。

标头

默认情况下,所有HttpClient 请求都设置以下标头:

Accept-Encoding: gzip

如果可能,这允许 HTTP 服务器对正文使用 gzip 压缩。如果不需要此行为,请将 Accept-Encoding 标头设置为其他内容。要关闭响应的 gzip 压缩,请清除此标头:

 request.headers.removeAll(HttpHeaders.acceptEncodingHeader)

关闭HttpClient

HttpClient 支持持久连接并缓存网络连接,以便尽可能将它们重用于多个请求。这意味着网络连接可以在请求完成后保持打开一段时间。使用HttpClient.close 强制HttpClient 对象关闭并关闭空闲的网络连接。

打开和关闭代理

默认情况下,HttpClient 使用环境中可用的代理配置,请参阅 findProxyFromEnvironment 。要关闭代理的使用,请将 findProxy 属性设置为 null

HttpClient client = HttpClient();
client.findProxy = null;

相关用法


注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 HttpClient class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。