代码之家  ›  专栏  ›  技术社区  ›  focode

在渡槽中发送邮政请求

  •  0
  • focode  · 技术社区  · 5 年前

    我在渡槽dart中创建了一个post请求,它以json作为body参数,我需要将该请求体发送到第三方api,当从第三方api获得响应时,我需要将该响应返回给用户。我已经更新了代码并打印了响应头,它显示http 400(错误请求)

    代码如下:

    @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;
    

    }

    当我向邮递员提出要求时 { “key”:空

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

    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。

    0 回复  |  直到 5 年前
        1
  •  0
  •   focode    5 年前

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

    var envalue=json.encode(请求);