dart - 写HttpClientReques的主体失败了吗?

时间:2014-09-12 05:40:38

标签: dart httprequest

我试图使用HttpClient将数据发送到本地服务器。但是,数据永远不会添加到请求中,我使用此代码:

      new HttpClient().put('127.0.0.1', 4040, '/employees/1').then((request) {
        request.cookies.add(new Cookie('DARTSESSID',sessionId)..path = '/');
        request.headers.add(HttpHeaders.ACCEPT_ENCODING, "");
        request.headers.add(HttpHeaders.CONTENT_TYPE, "text/json");
        request.write('{"id": 1,  "name": "luis"}');

        print(request.contentLength);
        return request.close();
      }).then(expectAsync((HttpClientResponse response) {
        expect(response.statusCode, 200);
        UTF8.decodeStream(response).then(expectAsync((body) {
          expect(body, equals('"employee: 1"'));
        }));
      }));

但始终打印request.contentLenght为-1。我没有运气之前看过那些链接:

https://code.google.com/p/dart/issues/detail?id=13293

dart - HttpClientRequest failing on adding data

https://code.google.com/p/dart/issues/detail?id=10026

2 个答案:

答案 0 :(得分:2)

写入请求是一种异步操作。仅仅因为contentLength说它仍然是-1并不意味着在将数据发送到服务器之前没有将数据添加到请求中。

此外:每当您添加新数据时,都不应更新内容长度。它是发送到服务器的值。 -1表示您还不知道尺寸。 我不确定,如果库自动更新它,如果它知道大小,但它不需要。

答案 1 :(得分:2)

ContentLength -1并不意味着没有数据,这意味着内容的长度未知,并且使用了流内容模式 - 对于HTTP 1.1,这通常会意思是Chunked ContentEncoding

我试图在包含服务器的设置中插入您的代码,但没有单元测试的东西:

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

void main() {
  HttpServer.bind('127.0.0.1', 4040).then((server) {
    server.listen((request) {
      UTF8.decodeStream(request).then((body) {
        print(body);
        request.response.close();
      });
    });
    new HttpClient().put('127.0.0.1', 4040, '/employees/1').then((request) {
      request.cookies.add(new Cookie('DARTSESSID', "1")..path = '/');
      request.headers.add(HttpHeaders.ACCEPT_ENCODING, "");
      request.headers.add(HttpHeaders.CONTENT_TYPE, "text/json");
      request.write('{"id": 1,  "name": "luis"}');

      print(request.contentLength);
      return request.close();
    }).then((HttpClientResponse response) {
      UTF8.decodeStream(response).then((body) {
        print(body);
      });
    });
  });
}

当我运行代码时,我得到了

-1
{"id": 1,  "name": "luis"}

正如所料。也许您遇到的问题是在服务器上?