Dart 实现代理服务器

Dart 实现代理服务器,dart,httprequest,httpresponse,proxy-server,dart-io,Dart,Httprequest,Httpresponse,Proxy Server,Dart Io,我正在尝试使用Dart实现代理服务器:浏览器上运行的web应用程序向本地运行的Dart服务器应用程序(代理服务器)发出请求,然后代理服务器向外部服务器发出请求。然后,我将CORS头添加到将要发送回客户端(web应用)的响应中 下面是我如何实现代理服务器的: import 'dart:io'; import 'dart:convert'; main() async { var server = await HttpServer.bind(InternetAddress.ANY_IP_V6,

我正在尝试使用Dart实现代理服务器:浏览器上运行的web应用程序向本地运行的Dart服务器应用程序(代理服务器)发出请求,然后代理服务器向外部服务器发出请求。然后,我将CORS头添加到将要发送回客户端(web应用)的响应中

下面是我如何实现代理服务器的:

import 'dart:io';
import 'dart:convert';

main() async {
  var server = await HttpServer.bind(InternetAddress.ANY_IP_V6, 8080);
  print('Server listening on port ${server.port}...');

  var client = 0;
  HttpClient proxy;
  await for (HttpRequest request in server) {
    print('Request received from client ${++client}.');

    // Adds CORS headers.
    request.response.headers.add('Access-Control-Allow-Origin', '*');

    proxy = new HttpClient()
      ..getUrl(Uri.parse('http://example.com/'))
          // Makes a request to the external server.
          .then((HttpClientRequest proxyRequest) => proxyRequest.close())

          // Sends the response to the web client.
          .then((HttpClientResponse proxyResponse) =>
              proxyResponse.transform(UTF8.decoder).listen((contents) =>
                request.response
                  ..write(contents)
                  ..close()
          ));

    print('Response sent to client $client.');
  }
}
这在大多数情况下都可以正常工作,但有时客户端只收到部分响应。我认为有时候
request.response.close()
是在
request.response.write(contents)
完成执行之前执行的,因此响应是在完成内容写入之前发送的


有没有办法解决这个问题,只在内容写完后才发送响应?谢谢。

您在收到第一块数据后关闭响应(
.close()
)。您应该从那里删除close()并侦听proxyResponse流的close事件,然后从那里关闭响应