首页 > 解决方案 > 如何将加密(3DES)数据发送到渡槽而不会出现任何错误?

问题描述

我正在使用渡槽 3.0。我需要学习如何在 Aqueduct 3.0 中捕获发布请求?

我的要求: http: //127.0.0.1 :8888/login/ziD7v0Ul99vmNWnxJRxZIiTY4zakNoq8GjM+oHROYz/YTHnd3NH1XfHRULY0jaHU

获得响应:[INFO] 渡槽:GET /login/ziD7v0Ul99vmNWnxJRxZIiTY4zakNoq8GjM+oHROYz/YTHnd3NH1XfHRULY0jaHU 11ms 404

我的 channel.dart 路由

// TODO: connect to Socket **********
router.route('/login/[:value]').link(() {
  return new LoginController();
  //..contentType = ContentType.TEXT;
});

我的 LoginController.dart

import 'package:aqueduct/aqueduct.dart';
import 'package:niyaziapi/niyaziapi.dart';
import 'package:niyaziapi/util/niyaziGetPrivate.dart';
import 'package:niyaziapi/util/niyaziSetPrivate.dart';

class LoginController extends Controller {
  String _xCustomerToken;
  String _xCustomerName;
  String _xPrivate;
  String _xResult;
  String _xRequestValue;
  String _xReply;

  @override
  Future<RequestOrResponse> processRequest(Request request) async {
    String tempData = request.toString();
    print("tempDate: $tempData"); // can’t print
    try {
      if (request.path.variables.containsKey('value')) {
        _xPrivate = (request.path.variables['value']).trim();
        print("_xPrivate: $_xPrivate");
        var decryptedData = await getPrivate(_xPrivate);
        var decryptedList = decryptedData.split(":_:");
        decryptedData = null;

        decryptedData = "Q101:_:" + decryptedList[2].toString() + ":_:" + decryptedList[3].toString();
        print(decryptedData);

        var socket = await Socket.connect('192.168.1.22', 1024);
        socket.write("$decryptedData\r\n");

        await for (var data in socket) {
          _xReply = new String.fromCharCodes(data).trim();
          var list = _xReply.split(":_:");
          _xCustomerToken = list[2].toString();
          _xCustomerName = list[3].toString();

          });
          _xResult = "$_xCustomerToken:_:$_xCustomerName";
          var encryptedData = await setPrivate(_xResult);
          return new Response.ok("$encryptedData");
        }
      } else {
        return new Response.ok("404: Wrong Request");
      }
    } catch (e) {
      return new Response.ok("404: $e.errorMessage");
    }
  }
}

当我测试时,我发现我的代码有效。我发送 3DES 数据并包含 + 和 / 字符的唯一原因。

如果您在第一个请求中仔细查看,数据中有一个 + 和 / 字符,这会给我一个错误。/login/ziD7v0Ul99vmNWnxJRxZIiTY4zakNoq8GjM+oHROYz/YTHnd3NH1XfHRULY0jaHU 19ms 404

另一方面,如果我删除这些角色,我会得到完美的回应。
/login/ziD7v0Ul99vmNWnxJRxZIiTY4zakNoq8GjMoHROYzYTHnd3NH1XfHRULY0jaHU 13 毫秒 200

那么,问题来了如何将加密(3DES)数据发送到渡槽而不会出现任何错误?

标签: requestdartcaptureaqueduct

解决方案


去喜欢渡槽两次:)

这很简单: var _xPrivate = (request.path.variables['value']).trim(); 改成:

var _xPrivate = request.path.remainingPath;
print("request: $_xPrivate");

推荐阅读