flutter - 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
由于使用了特殊字符,请求无效。如何提出请求,以便特殊字符也得到正确处理?
解决方案
在 http restful 请求中,http GET
请求必须是 url 编码的,这意味着大多数特殊字符必须以 Web 服务器可以理解的方式编码。
因此,加号 (+) 或问号 (?) 等字符必须替换为其 URL 编码等效项(例如,%2b 表示加号,%3F 表示问号),反之亦然以进行解码。
可以在网上找到几个 URL 编码器,例如http://www.url-encode-decode.com/
在 Dart 中,您可以使用Uri.encodeFull()
编码字符串和Uri.encodeComponent()
编码字符串组件
与解码类似,您可以使用Uri.decodeFull()
和其他
在这里阅读更多关于这个Uri 类
推荐阅读
- javascript - 如何将 WooCommerce 结帐错误/通知移动到结帐模板文件中的另一个位置?
- c# - 如果文本太长,则 XAML TextBlock 绑定末尾带有“...”
- java - 基于“类型”,JTable 单元格必须从 Textfield 切换为 JComboBox
- java - 合并排序的 Java 实现;找不到错误
- c++ - 使用 TRESTClient 关闭时程序异常终止
- hibernate - 保存 JPA 实体错误 - TransientObjectException:对象引用未保存的瞬态实例 - 保存瞬态实例
- python - 如何根据单元格中存在的单词使用 pandas 替换列值
- java - 使用 Jetty 阻止响应
- react-native - 无法播放视频。如何访问 Android 模拟器中文件下载中的视频路径
- javascript - 如何从已编译的 Electron 应用程序中获取源文件?