Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振-发出web请求_Flutter_Dart - Fatal编程技术网

Flutter 颤振-发出web请求

Flutter 颤振-发出web请求,flutter,dart,Flutter,Dart,我想知道在解析来自flatter的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&

我想知道在解析来自flatter的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和用户%5B0%5D%5Bpassword%5D=Johns_Password&i=1


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

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

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

可以在网上找到几个URL编码器,例如

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

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


在这里阅读更多信息

切换到更好的web托管服务解决了我的问题。我当时使用的是AeonFree,这是一种免费的网络托管服务,由于明显的原因,访问受到限制


我还从使用切换到使用。

您尝试调用POST或获取的API?是http包:是的,我完全理解该包,但您必须具有您调用的API类型,我怀疑您尝试错误的方式调用POST API。我正在向Moodle API发送请求。我已经测试了Moodle API,它运行良好。也许这也能帮你尝试一下,谢谢你指出这一点。我对网络编程有点陌生,所以我想这可能就是问题所在。不确定为什么我的请求无法从我的颤振应用程序运行。如果我在浏览器中运行相同的请求,它将按预期工作。冷静,无需担心,如果此答案帮助您提高投票率并同时接受此答案,我将为@meeth23感到高兴。不幸的是,我需要15分才能提高投票率。当我能接受自己的答案时,我会这样做。