dart:io
库中HttpClient
类的用法介绍如下。
用于与 HTTP 服务器通信的 HTTP 客户端。
向 HTTP 服务器发送 HTTP 请求并接收响应。在对同一服务器的多个请求之间维护状态,包括会话 cookie 和其他 cookie。
注意:HttpClient 提供低级 HTTP 函数。我们建议用户从
中找到的更多 developer-friendly 和可组合 API 开始。package:http
HttpClient 包含许多将 HttpClientRequest 发送到 Http 服务器并接收回 HttpClientResponse 的方法。例如,您可以分别对 GET 和 POST 请求使用 get 、 getUrl 、 post 和 postUrl 方法。
发出一个简单的 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 的未来是由 getUrl 和 open 等方法创建的。
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 HttpClient.findProxy用法及代码示例
- Dart HttpClientRequest用法及代码示例
- Dart HttpClient.findProxyFromEnvironment用法及代码示例
- Dart HttpClientResponse用法及代码示例
- Dart HttpClient.connectionFactory用法及代码示例
- Dart HttpClientRequest.followRedirects用法及代码示例
- Dart HttpClient.keyLog用法及代码示例
- Dart HttpClientRequest.abort用法及代码示例
- Dart HttpRequest.postFormData用法及代码示例
- Dart HttpOverrides用法及代码示例
- Dart HttpServer.defaultResponseHeaders用法及代码示例
- Dart HttpRequest.request用法及代码示例
- Dart HttpDate.parse用法及代码示例
- Dart HttpRequest用法及代码示例
- Dart HttpHeaders用法及代码示例
- Dart HttpServer用法及代码示例
- Dart HttpRequest.getString用法及代码示例
- Dart HttpRequest构造函数用法及代码示例
- Dart HttpResponse用法及代码示例
- Dart HtmlCollection.last用法及代码示例
- Dart HtmlEscape用法及代码示例
- Dart HtmlEscapeMode用法及代码示例
- Dart HtmlCollection.elementAt用法及代码示例
- Dart HtmlCollection.length用法及代码示例
- Dart HtmlDocument.registerElement2用法及代码示例
注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 HttpClient class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。