草庐IT

http - Flutter http post 出错但在 postman 中有效

coder 2023-07-21 原文

我正在尝试向响应如下所示的网址发出发布请求

{"status":1,"msg":"Success"}

下面是我的代码

void signOut(String userId, String loginType, BuildContext context) async {
    print(userId + "\nFargo" + loginType);
    await checkInternetConnection().then((isAvailable) async {
      if (isAvailable) {
        //ToDO showProgress Bar
        final response = await http.post(SIGN_OUT_URL, headers: {
          "Accept": "application/json",
        }, body: {
          "userid": userId,
          "login_type": loginType
        });

        print("Response is" +
            response.body.toString() +
            "\nfgfdgfdgdf" +
            response.request.toString());

        final parsedJson = json.decode(response.body);
        signOutModel = SignOutModel.fromJson(parsedJson);
        if (signOutModel.status == 1) {

          //ToDO hide Progress Bar
        } else {
          //ToDO hide Progress Bar
          showMessageDialog(signOutModel.msg, context);
        }
      } else {
        showMessageDialog(CHECK_YOUR_INTERNET_CONNECTION, context);
      }
    });
  }

但每当发出请求时,我都会收到以下错误

[

ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter ( 7932): FormatException: Unexpected character (at character 1)
E/flutter ( 7932): <!DOCTYPE html>
E/flutter ( 7932): ^
E/flutter ( 7932): 
E/flutter ( 7932): #0      _ChunkedJsonParser.fail (dart:convert/runtime/libconvert_patch.dart:1358:5)
E/flutter ( 7932): #1      _ChunkedJsonParser.parseNumber (dart:convert/runtime/libconvert_patch.dart:1254:9)
E/flutter ( 7932): #2      _ChunkedJsonParser.parse (dart:convert/runtime/libconvert_patch.dart:922:22)
E/flutter ( 7932): #3      _parseJson (dart:convert/runtime/libconvert_patch.dart:29:10)
E/flutter ( 7932): #4      JsonDecoder.convert (dart:convert/json.dart:540:36)
E/flutter ( 7932): #5      JsonCodec.decode (dart:convert/json.dart:167:41)
E/flutter ( 7932): #6      BaseScreenState.signOut.<anonymous closure> (package:dice_clutter/screens/base/base_screen.dart:223:33)
E/flutter ( 7932): <asynchronous suspension>
E/flutter ( 7932): #7      _RootZone.runUnary (dart:async/zone.dart:1379:54)
E/flutter ( 7932): #8      _FutureListener.handleValue (dart:async/future_impl.dart:129:18)
E/flutter ( 7932): #9      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45)
E/flutter ( 7932): #10     Future._propagateToListeners (dart:async/future_impl.dart:671:32)
E/flutter ( 7932): #11     Future._complete (dart:async/future_impl.dart:476:7)
E/flutter ( 7932): #12     _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
E/flutter ( 7932): #13     _AsyncAwaitCompleter.complete (dart:async/runtime/libasync_patch.dart:28:18)
E/flutter ( 7932): #14     _completeOnAsyncReturn (dart:async/runtime/libasync_patch.dart:295:13)
E/flutter ( 7932): #15     checkInternetConnection (package:dice_clutter/helpers/internet_connection.dart)
E/flutter ( 7932): <asynchronous suspension>
E/flutter ( 7932): #16     BaseScreenState.signOut (package:dice_clutter/screens/base/base_screen.dart:208:11)
E/flutter ( 7932): <asynchronous suspension>
E/flutter ( 7932): #17     BaseScreenState.openScreen (package:dice_clutter/screens/base/base_screen.dart:202:7)
E/flutter ( 7932): #18     BaseScreenState.build.<anonymous closure>.<anonymous closure> (package:dice_clutter/screens/base/base_screen.dart:90:19)
E/flutter ( 7932): #19     _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
E/flutter ( 7932): #20     _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
E/flutter ( 7932): #21     GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
E/flutter ( 7932): #22     TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
E/flutter ( 7932): #23     TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:204:7)
E/flutter ( 7932): #24     GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
E/flutter ( 7932): #25     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:184:20)
E/flutter ( 7932): #26     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)
E/flutter ( 7932): #27     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)
E/flutter ( 7932): #28     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
E/flutter ( 7932): #29     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
E/flutter ( 7932): #30     _invoke1 (dart:ui/hooks.dart:168:13)
E/flutter ( 7932): #31     _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)

该 api 通过 postman 正常工作,我已经检查了我在 post 请求中输入的 url 和参数 它们与 postman 的相同,但我仍然不断收到错误。

最佳答案

您的请求正文不是 JSON 字符串。您必须首先使用 dart:convert 包转换它:

import 'dart:convert';
..
var body = jsonEncode({
  "userid": userId,
  "login_type": loginType
})
final response = await http.post(SIGN_OUT_URL, headers: {
  "Accept": "application/json",
  }, body: body
);

关于http - Flutter http post 出错但在 postman 中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54425328/

有关http - Flutter http post 出错但在 postman 中有效的更多相关文章

  1. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  2. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  3. ruby - 如何进行排列以有效地定制输出 - 2

    这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][

  4. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  5. ruby - 安装libv8(3.11.8.13)出错,Bundler无法继续 - 2

    运行bundleinstall后出现此错误:Gem::Package::FormatError:nometadatafoundin/Users/jeanosorio/.rvm/gems/ruby-1.9.3-p286/cache/libv8-3.11.8.13-x86_64-darwin-12.gemAnerroroccurredwhileinstallinglibv8(3.11.8.13),andBundlercannotcontinue.Makesurethat`geminstalllibv8-v'3.11.8.13'`succeedsbeforebundling.我试试gemin

  6. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  7. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  8. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

  9. ruby-on-rails - Rails - 从命名路由中提取 HTTP 动词 - 2

    Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba

  10. python - 是否可以使用 Ruby 或 Python 禁用 anchor /引用来发出有效的 YAML? - 2

    是否可以在PyYAML或Ruby的Psych引擎中禁用创建anchor和引用(并有效地显式列出冗余数据)?也许我在网上搜索时遗漏了一些东西,但在Psych中似乎没有太多可用的选项,而且我也无法确定PyYAML是否允许这样做.基本原理是我必须序列化一些数据并将其以可读的形式传递给一个不是真正的技术同事进行手动验证。有些数据是多余的,但我需要以最明确的方式列出它们以提高可读性(anchor和引用是提高效率的好概念,但不是人类可读性)。Ruby和Python是我选择的工具,但如果有其他一些相当简单的方法来“展开”YAML文档,它可能就可以了。 最佳答案

随机推荐