dart – 如何在flutter中使用url编码的主体发出HTTP POST请求?

dart – 如何在flutter中使用url编码的主体发出HTTP POST请求?,第1张

概述我正试图在内容类型为url编码的情况下发布帖子请求.当我写body:json.encode(data)时,它编码为纯文本. 如果我写body:data我得到错误类型’_InternalLinkedHashMap< String,dynamic>‘不是类型转换中类型’String’的子类型 这是数据对象 var match = { "homeTeam": {"team": "Team A"}, 我正试图在内容类型为url编码的情况下发布帖子请求.当我写body:Json.encode(data)时,它编码为纯文本.

如果我写body:data我得到错误类型’_InternallinkedHashMap< String,dynamic>‘不是类型转换中类型’String’的子类型

这是数据对象

var match = {  "homeTeam": {"team": "Team A"},"awayTeam": {"team": "Team B"}};

我的要求

var response = await post(Uri.parse(url),headers: {      "Accept": "application/Json","Content-Type": "application/x-www-form-urlencoded"    },body: match,enCoding: EnCoding.getByname("utf-8"));
解决方法 您需要添加三个额外步骤:
首先,您需要将Json映射转换为String(使用Json.encode)
然后,如果要将其作为application / x-www-form-urlencoded发送,则需要对其进行Uri编码.
最后,您需要为要发布名称的参数指定.

例如(注意,这是使用dart:io httpClIEnt,但它基本相同):

Future<httpClIEntResponse> foo() async {    Map<String,dynamic> JsonMap = {      'homeTeam': {'team': 'Team A'},'awayTeam': {'team': 'Team B'},};    String JsonString = Json.encode(JsonMap); // encode map to Json    String paramname = 'param'; // give the post param a name    String formBody = paramname + '=' + Uri.encodequeryComponent(JsonString);    List<int> bodyBytes = utf8.encode(formBody); // utf8 encode    httpClIEntRequest request =        await _httpClIEnt.post(_host,_port,'/a/b/c');    // it's polite to send the body length to the server    request.headers.set('Content-Length',bodyBytes.length.toString());    // todo add other headers here    request.add(bodyBytes);    return await request.close();  }

以上是针对dart:io版本(当然,你可以在Flutter中使用)
如果您想坚持使用该软件包:http版本,那么您需要稍微调整一下Map. body必须是Map< String,String>.您需要确定您想要的POST参数.你想要两个:homeTeam和awayTeam吗?或者一个,比如,teamJson?

这段代码

Map<String,String> body = {    'name': 'doodle','color': 'blue','homeTeam': Json.encode(      {'team': 'Team A'},),'awayTeam': Json.encode(      {'team': 'Team B'},};  Response r = await post(    url,body: body,);

在线上产生这个

name=doodle&color=blue&homeTeam=%7B%22team%22%3A%22Team+A%22%7D&awayTeam=%7B%22team%22%3A%22Team+B%22%7D

或者,这个

Map<String,'teamJson': Json.encode({      'homeTeam': {'team': 'Team A'},}),);

在线上产生这个

name=doodle&color=blue&teamJson=%7B%22homeTeam%22%3A%7B%22team%22%3A%22Team+A%22%7D%2C%22awayTeam%22%3A%7B%22team%22%3A%22Team+B%22%7D%7D

包:http客户端负责:编码Uri.encodequeryComponent,utf8编码(请注意,这是默认值,因此无需指定)并在Content-Length标头中发送长度.您仍然必须执行Json编码.

总结

以上是内存溢出为你收集整理的dart – 如何在flutter中使用url编码的主体发出HTTP POST请求?全部内容,希望文章能够帮你解决dart – 如何在flutter中使用url编码的主体发出HTTP POST请求?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1003366.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存