gpt4 book ai didi

json - 在本地 IP 地址上使用来自 dart/flutter 的 http.get 时获取 statuscode = 400

转载 作者:行者123 更新时间:2023-12-05 07:18:12 33 4
gpt4 key购买 nike

我的目标:

我想向本地网络中设备上运行的 RestApi 发出获取请求,以检索设备生成的 JSON 数据。

发生了什么

RestApi 正确响应来自网络中所有其他设备的浏览器调用。 Bash 的 curl 也有效,但是,当我尝试通过 dart 的 http.get 访问数据时,程序无法检索 JSON 数据 - 我收到 Statuscode 400。

浏览器调用结果

我尝试过的:

  • 修改 URL 以确保其编写正确,
  • 设置标题 {"content": "application/json"}
  • 不使用(默认)标题
  • 从单独的 dart 文件和 flutter 应用程序中嵌入的函数运行 API 调用。两者都导致 Statuscode 400,尽管 flutter 提供了更多错误信息:未处理的异常:SocketException:操作系统错误:没有到主机的路由,errno = 113。我相信我在尝试其他操作时也看到了 errno = 111。
  • 使用较低级别的 HttpClient 而不是 Http

在 flutter 应用程序中,我可以通过 http.get 连接到存储在 firebase 上的数据很容易,但是调用本地网络中的设备会导致上述情况。

独立的dart文件

import 'package:dart_http/dart_http.dart' as dart_http;
import 'package:http/http.dart' as http;
import 'dart:io';
import 'dart:convert';

main(List<String> arguments) async {

var url = 'http://192.168.0.5/api/device/state';

http.Response response1 =
await http.get(url, headers: {"content": "application/json"});
print('Response status: ${response1.statusCode}');
print('Response body: ${response1.body}');
print('Response body: ${response1.headers}');
print('Response body: ${response1.reasonPhrase}');
print('Response body: ${response1.request}');

HttpClient()
.getUrl(Uri.parse(
'http://192.168.0.5/api/device/state/')) // produces a request object
.then((request) => request.close()) // sends the request
.then((response) {
print(response);
response.transform(Utf8Decoder()).listen(print);
}); // transforms and prints the response
}

在flutter项目中调用-嵌入

 Future<Map<String, String>> getAirSensorStatus() async {
print("Getting Air Sensor");
http.Response response =
await http.get('http://192.168.0.5/api/device/state');
print(response);
print("Status code " + "${response.statusCode}");

try {
if (response.statusCode != 200 && response.statusCode != 201) {
print("Something went wrong. Status not 200 and not 201 for AirSensor");
return null;
}
final responseData = json.decode(response.body);

return responseData;
} catch (error) {
print(error);
return null;
}
}

我希望在响应中获得状态码 200 和 JSON 数据。相反,只创建了一个响应对象,没有建立连接。

你能帮我弄清楚这是为什么吗?

我尝试访问的 API 文档的链接:

https://technical.blebox.eu/

最佳答案

这个问题似乎是由于客户端无法根据请求到达本地服务器造成的。 HTTP error 400被标记为“Bad request”和“No route to host, errno = 113”通常是由网络错误引起的。 common fix此问题的目的是确保客户端位于托管本地服务器的同一网络上。

关于json - 在本地 IP 地址上使用来自 dart/flutter 的 http.get 时获取 statuscode = 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58462628/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com