【问题标题】:(Flutter) HTTPClient Invalid argument(s): No host specified in URI(Flutter) HTTPClient Invalid argument(s): No host specified in URI
【发布时间】:2017-12-24 03:17:35
【问题描述】:

目前正在开发一个允许用户查看存储在 Heroku 上的数据库的小应用程序,但是我在使用数据库的 URL 时遇到了上述问题:“.herokuapp.com/api/”。

var client = createHttpClient();
var response = await client.read('<example>.herokuapp.com/api/<data>');
List data = JSON.decode(response);

Heroku 似乎没有使用 HTTP(S) 或 www,我认为后者是问题所在。

有谁知道我可以如何绕过或解决这个问题?

【问题讨论】:

  • 如果使用浏览器或者curl或者wget访问url会怎样?
  • 我不确定wgetcurl 是什么,但浏览器可以正常工作。
  • wgetcurl 是发出 HTTP 请求的命令行工具。浏览器记录网络请求的浏览器开发工具中的 URL 是什么样的?
  • 我在哪里可以找到它,因为我之前尝试过寻找无济于事?
  • 你解决过这个问题吗?

标签: flutter http httpclient uri host


【解决方案1】:

我知道这是一个老问题,但我只是偶然发现了这个问题,并通过在 URL 前添加 "http://" 来解决它。

【讨论】:

    【解决方案2】:

    这是因为应用尝试异步获取 renderUrl。在取回渲染 URL 之前,它为空。 NetworkImage(renderUrl ?? '') 然后尝试使用空字符串作为 url 并导致异常。 我不确定这是否是最好的解决方案,但这似乎可行:

    有很多方法可以解决这个问题,这里是其中的一些

    1. 在你的uri前添加https://

    2. 对于图像:我决定在将其放入小部件之前检查图像 url 是否为空:

       CircleAvatar(
          backgroundColor: Colors.grey,
          backgroundImage: _urlImage.isNotEmpty
              ? NetworkImage(_urlImagem)
              : null,
        ),
      

    【讨论】:

    • 第二个选项帮助了我。
    • 图片的第二个选项很棒,唯一一个救了我的解决方案。非常感谢。
    • 第二个选项适用于我的网络图像错误
    【解决方案3】:

    其中一个问题是您的 API URL 前没有“http://”;

    解决方案 在您的 API URL 前添加“http://” 示例 API_URL = "api.openweathermap.org/data/2.5/weather?q={city%20name}&appid={your%20api%20key}"

    通过添加“http://”它变成 "http://api.openweathermap.org/data/2.5/weather?q={city%20name}&appid={your%20api%20key}"

    【讨论】:

      【解决方案4】:

      如果您在最新版本的 Flutter 中仍然遇到此问题,请尝试检查以下事项。

      以前 uriString 类型。现在它是 http 请求的 Uri 类型。

      如果我们尝试将 url 用作

      String urlPath = '<example>.herokuapp.com/api/<data>';
      client.read(Uri(path: urlPath));
      

      我们将得到异常 在 URI 中没有指定主机

      这可以通过使用 Uri 类中的 parse 方法解决

      client.read(Uri.parse(urlPath));
      

      它解决了问题。

      【讨论】:

        【解决方案5】:

        这对我有用

        child: CircleAvatar(
              backgroundImage: imageFile != null
                  ? FileImage(imageFile)
                  : imgUrl.isNotEmpty
                      ? NetworkImage(imgUrl)
                      : null,),
        

        【讨论】:

          【解决方案6】:
          猜你喜欢
          • 1970-01-01
          • 2019-05-25
          • 2021-02-26
          • 2022-12-01
          • 1970-01-01
          • 2020-01-29
          • 1970-01-01
          • 2017-02-04
          • 2022-12-15
          相关资源
          最近更新 更多