【问题标题】:How to make a proper http request?如何发出正确的http请求?
【发布时间】:2021-03-05 16:36:53
【问题描述】:

我似乎无法使用我的代码发出正确的 http 请求。每当我运行以下代码时,

var url = Uri.https('datamall2.mytransport.sg', '/ltaodataservice/BusArrivalv2?BusStopCode=', {'BusStopCode': busStopCode});
  final response = await http.get(
    url,
    headers: <String, String>{
      'Content-Type': 'application/json',
      'AccountKey': accountKey,
    },
  );

我收到以下错误

I/flutter (24816): SocketException: OS Error: Connection refused, errno = 111, address = datamall2.mytransport.sg

这是我正在尝试发出的 http 请求

http://datamall2.mytransport.sg/ltaodataservice/BusArrivalv2?BusStopCode=busStopCode (busStopCode is a 5 digit number)

【问题讨论】:

    标签: flutter http dart


    【解决方案1】:

    使用了错误的协议。

    您已请求 https。 服务器只响应http。

    你可以试试更简单的:

    String url = 'http://datamall2.mytransport.sg/ltaodataservice/BusArrivalv2?$busStopCode';
      final response = await http.get(
        url,
        headers: <String, String>{
          'Content-Type': 'application/json',
          'AccountKey': accountKey,
        },
      );
    

    【讨论】:

    • 最新的 http 包需要 Uri 而不是字符串。在更新 pub 规范版本之前,我曾经这样做过。
    • 啊,在这种情况下:Uri uri = Uri.parse('http://myrandom-url.com/with-stuff'); 可能是创建 URI 对象的更简单方法。
    【解决方案2】:

    您应该将您的 url 变量更改为:

    var url = Uri.http('datamall2.mytransport.sg', '/ltaodataservice/BusArrivalv2', {'BusStopCode': busStopCode});
    

    【讨论】:

    • 我收到错误:错误状态:平台不允许不安全的 HTTP。
    • 哦,没关系,显然我需要添加以下权限: Android 打开 android/app/src/main 文件夹中的 AndroidManifest.xml 文件。然后将 usesCleartextTraffic 设置为 true。 iOS 打开 ios/Runner 文件夹中的 Info.plist 文件。然后添加以下密钥。 NSAppTransportSecurityNSAllowsArbitraryLoads
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 2018-09-28
    相关资源
    最近更新 更多