【问题标题】:Send post request in aqueduct dart在渡槽飞镖中发送帖子请求
【发布时间】:2020-04-21 16:31:27
【问题描述】:

我在 aqueduct dart 中创建了一个发布请求,它以 json 作为正文参数,我需要将该请求正文发送到第三方 api,在从第三方 api 获得响应后,我需要将该响应返回给用户。我已经更新了代码并打印了响应头,上面写着 http 400 (bad request)

这里是代码:

@override
  Controller get entryPoint {
    String dataRecieved;
    var completer = new Completer();
    var contents = new StringBuffer();
    final router = Router();
    // Prefer to use `link` instead of `linkFunction`.
    // See: https://aqueduct.io/docs/http/request_controller/
    router.route("/uploadurl").linkFunction((request) async {
      final req = await request.body.decode();

//      print( await request.body.decode());
      HttpClient client = new HttpClient();
      client.badCertificateCallback =
          ((X509Certificate cert, String host, int port) => true);
      var auth = 'Bearer ' +
          'eyJ...';

      await client
          .postUrl(Uri.parse(
              'https://<removed>/api/datalake/v3/generateDownloadObjectUrls'))
          .then((HttpClientRequest requestSend) {
        requestSend.headers
            .add("Content-Type", "application/json; charset=UTF-8");
        requestSend.headers.add("Authorization", auth);
//        requestSend.headers.contentLength = request.body.length;
        print(req);
        requestSend.write(req);
        return requestSend.close();
      }).then((HttpClientResponse response) async {
        print(await response.contentLength);
        var resStream = response.transform(Utf8Decoder());
        await for (var data in resStream) {
          print('Received data: $data');
        }
        print(await response.statusCode);


      }).catchError((e) {
        print("Request error: $e"); // The only case
      });

      print(contents);
      return Response.ok({"key": dataRecieved});
    });



return router;

}

当我向邮递员提出请求时,我得到 { “关键”:空 }

我认为我无法向第三方 API 发送正确的请求,因为当我从邮递员测试第三方 API 时,它正在发送正确的响应

我的 pubspec.yaml 文件是:

name: proxydl
description: An empty Aqueduct application.
version: 0.0.1
author: stable|kernel <jobs@stablekernel.com>

environment:
  sdk: ">=2.0.0 <3.0.0"

dependencies:
  aqueduct: ^3.0.0
  http: ^0.12.0+2

dev_dependencies:
  test: ^1.0.0
  aqueduct_test: ^1.0.0

这是我从邮递员发送的帖子请求:

{
    "paths": [
        {
            "path": "/f1/f2.log"
        }
    ]
}

这是我第一个在服务器端使用 Dart 的 POC。

【问题讨论】:

    标签: dart aqueduct


    【解决方案1】:

    经过进一步调查,我找到了答案:

    最终请求 = 等待 request.body.decode(); var envalue = json.encode(req);

    目前,这行得通,但我觉得可能有更好的答案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多