首页 > 解决方案 > Flutter - 发出网络请求

问题描述

我想知道在解析来自 Flutter 的 JSON 请求时是否有格式化特殊字符的方法。我已经测试了一个http请求:

void curlRequest() async
  {
    String urlRequest = "http://my.web.url/webservice/rest/server.php?wstoken=my_token&moodlewsrestformat=json&wsfunction=core_user_create_users&users[0][username]=test_user_4&users[0][firstname]=John&users[0][lastname]=Doe&users[0][email]=john.doe@gmail.com&users[0][password]=Johns_Password";

    http.post(urlRequest, headers: {'Content-type': 'application/json; charset=utf-8'}).then((response){
        print("Response status: ${response.statusCode}");
        print("Response body: ${response.body}");
    });
  }

我得到以下回复:

http://my.web.url/webservice/rest/server.php?wstoken=my_token&moodlewsrestformat=json&wsfunction=core_user_create_users&users%5B0%5D%5Busername%5D=test_user_4&users%5B0%5D%5Bfirstname%5D=John&users%5B0%5D%5Blastname%5D=Doe&users%5B0%5D%5Bemail%5D=john.doe@gmail.com&users%5B0%5D%5Bpassword%5D=Johns_Password&i=1

由于使用了特殊字符,请求无效。如何提出请求,以便特殊字符也得到正确处理?

标签: flutterdart

解决方案


在 http restful 请求中,http GET请求必须是 url 编码的,这意味着大多数特殊字符必须以 Web 服务器可以理解的方式编码。

因此,加号 (+) 或问号 (?) 等字符必须替换为其 URL 编码等效项(例如,%2b 表示加号,%3F 表示问号),反之亦然以进行解码。

可以在网上找到几个 URL 编码器,例如http://www.url-encode-decode.com/

在 Dart 中,您可以使用Uri.encodeFull()编码字符串和Uri.encodeComponent()编码字符串组件

与解码类似,您可以使用Uri.decodeFull()和其他

在这里阅读更多关于这个Uri 类


推荐阅读