【问题标题】:HttpRequest GET with sendData as query parameters?使用 sendData 作为查询参数的 HttpRequest GET?
【发布时间】:2014-01-03 14:32:28
【问题描述】:

这个问题有点像HTTPRequest.request with sendData, can't seem to get this to work 的重复,但我现在有了更多信息。这里的目标是发送一个带有查询参数的 GET 请求。我最初尝试这样发送我的请求:

HttpRequest request = new HttpRequest();

request.open("GET", _url, async:true);
request.onError.listen(_onLoadError, onError: _onLoadError);
request.send(sendData);

其中 sendData 是一个遵循查询参数正常格式的字符串(?myVariable=2&myOtherVariable=a 等),因为这是这里的最终目标。请求被发送,但我从未在任何监控工具中看到任何额外的数据(sendData)(我使用的是 Charles)。然后我尝试了:

HttpRequest request = new HttpRequest();

request.open("GET", _url + sendData, async:true);
request.onError.listen(_onLoadError, onError: _onLoadError);
request.send();

所以现在我只是将查询字符串附加到 url 本身。这按预期工作,但远非优雅。有没有更好的解决方案?

【问题讨论】:

    标签: dart dart-io


    【解决方案1】:

    GET 请求中,您总是将查询字符串添加到 URL 中吗? 当您创建 Uri 时,如果您觉得这样更优雅,可以传入带有查询参数的地图。

    Map query = {'xx':'yy', 'zz' : 'ss'};
    String url = "http://localhost:8080/myapp/signinService";
    
    Uri uri = new Uri(path: url, queryParameters : query);
    
    HttpRequest.getString(uri.toString().then((HttpRequest req) ...
    

    【讨论】:

    • 以上代码导致错误Invalid argument(s): No host specified in URI http%3A//xxxx.xxxx.xxxx/v2/api/devices/?ids=A0
    • 我假设是因为%3A
    • Uri(path: url, queryParameters : query) 结果 '%3A' 是 : 的编码形式。有什么解决方法吗?
    • 因为http://xxxx.xxxx.xxxx 不是路径。使用Uri.parse('....'),然后使用查询参数更新uri。
    • 很高兴听到:)
    【解决方案2】:

    根据W3 XMLHttpRequest Specification

    (在 send() 方法中)如果请求方法是 GET 或 HEAD,则忽略该参数。

    这个问题的简单答案是否定的。 sendData 不能附加到 GET 请求,这是由 XMLHttpRequest 规范而不是 Dart 的限制。

    也就是说,对于这样的请求,使用HttpRequest.getString 可能更具可读性和惯用性

    HttpRequest.getString(_url + sendData).then((HttpRequest req) {
        // ... Code here
    }).catchError(_onLoadError);
    

    【讨论】:

      【解决方案3】:

      如果您想从 url (String) + 查询参数 (Map) 生成有效的 URL,您可以执行以下操作:

       Uri uri = Uri.parse(url).replace(queryParameters: parameters);
       String finalURL = uri.toString();
      

      url 是String,参数是Map

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-17
        • 2022-10-16
        • 1970-01-01
        • 2021-11-08
        • 1970-01-01
        • 1970-01-01
        • 2021-05-23
        • 1970-01-01
        相关资源
        最近更新 更多