Toit - 如何使用 `http.Client` 连接到 `localhost`?

Toit - How can I connect to `localhost` using `http.Client`?

我正在尝试在本地网络上的 ESP32 上测试 Toit。我的笔记本电脑上有一个 fastapi 应用程序 运行ning,我正在尝试 运行 GET 请求。

我正在使用 http 软件包:

$ toit pkg install github.com/toitlang/pkg-http

我的代码main.py:

import http
import net
import encoding.json

URL ::= "localhost:8000"
PATH ::= "/"

main:
  network := net.open
  client := http.Client network
  // The `get` method automatically closes the connection when
  // the response has been fully read.
  response := client.get URL PATH
  data := json.decode_stream response.body

  print data

但我收到错误消息:Connection refused

$ toit run --device <UUID> main.toit
2022-05-30T20:47:00.111752Z: <process initiated>
2022-05-30T20:47:00.384733Z: <stack trace>
EXCEPTION error.
Connection refused
  0: TcpSocket.connect         system/modules/tcp.toit:149:40
  1: TcpSocket.connect         system/modules/tcp.toit:139:12
  2: WifiNetworkInterface.tcp_connect system/components/wifi.toit:101:7
  3: NetworkInterfaceResource.tcp_connect system/components/network.toit:95:26
  4: register_network.<lambda> system/components/network.toit:26:23
  5: KernelBroker.register_descriptor_procedure.<lambda> system/kernel/rpc.toit:44:14
  6: RpcRequest_.process.<block> <sdk>/rpc/broker.toit:98:26
  7: RpcRequest_.process       <sdk>/rpc/broker.toit:95:3
  8: RpcRequestQueue_.ensure_processing_task_.<lambda>.<block>.<block> <sdk>/rpc/broker.toit:214:20
  9: RpcRequestQueue_.ensure_processing_task_.<lambda>.<block> <sdk>/rpc/broker.toit:209:9
 10: RpcRequestQueue_.ensure_processing_task_.<lambda> <sdk>/rpc/broker.toit:204:56



2022-05-30T20:47:00.518790Z: <process terminated - exit code: 1>

无论我使用 localhost:8000 还是 127.0.0.1:8000,我得到的结果都是一样的。


我可以使用简单的 cURL 命令访问笔记本电脑上的端点,因此端点正常工作。

toit run命令在ESP32上执行应用。因此,localhost 指的是设备本身,而不是您的机器。

您可以尝试 运行 在您的机器上本地运行 Toit 程序(使用 Toit 的 open-source 版本:https://github.com/toitlang/toit/releases),或者您可以更改 localhost 到您机器的 IP 地址。

如何获取本地计算机的 IP 地址取决于您的操作系统。在我的 Linux 机器上,我只需键入 ip address.