HarmonyOS 鸿蒙Next:求助 http.request 在本机部署服务器预览器可正常Post但本地模拟器测试服务端一直回复400 Bad Request
HarmonyOS 鸿蒙Next:求助 http.request 在本机部署服务器预览器可正常Post但本地模拟器测试服务端一直回复400 Bad Request 问题如题所示,本地模拟器一直不行,预览器是可以。服务器是c#写的一个简易测试用的,就运行在这台电脑上。代码和日志都在,大家帮忙看下,卡好几天了
代码如下:
按钮:
函数:
预览器上传日志:
本地模拟器上传日志:
10-12 19:09:42.659 22910-18987/com.example.prophetemperor I 00000/testLog: 接收到httpRequest响应:{“responseCode”:400,“cookies”:"",“header”:{“connection”:“close”,“content-length”:“334”,“content-type”:“text/html; charset=us-ascii”,“date”:“Sun, 15 Oct 2023 14:52:54 GMT”,“server”:“Microsoft-HTTPAPI/2.0”},“result”:"<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN”“http://www.w3.org/TR/html4/strict.dtd”> <HTML><HEAD><TITLE>Bad Request</TITLE> <META HTTP-EQUIV=“Content-Type” Content=“text/html; charset=us-ascii”></HEAD> <BODY><h2>Bad Request - Invalid Hostname</h2> <hr><p>HTTP Error 400. The request hostname is invalid.</p> </BODY></HTML> ",“resultType”:0}
以上是问题和相关资料,有大神可以帮忙解惑一下吗?万分感谢!!!
更多关于HarmonyOS 鸿蒙Next:求助 http.request 在本机部署服务器预览器可正常Post但本地模拟器测试服务端一直回复400 Bad Request的实战教程也可以访问 https://www.itying.com/category-93-b0.html
问题找到了,出在服务器端,我在开启服务器端的时候。使用的是http://localhost:8811/Upload/,我把它替换成http://192.168.3.94:8811/Upload/就可以了,我一直以为localhost指向的就是本机,192.168.3.94也是本机IP,所以以为使用localhost也没问题。睡前脑袋一抽,试一下直接用实际IP,既然好了,真是柳暗花明又一村啊。
我也搜了一下资料,
"localhost"是一个特殊的主机名,它指向本地计算机上的网络接口(通常是回环接口,即127.0.0.1)。因此,当使用"localhost"作为服务器监听地址时,服务器将只能在本地计算机上接收到连接请求。
而"192.168.3.94"是一个具体的IP地址,表示一个局域网中的某个设备。当使用这个IP地址作为服务器监听地址时,服务器将会在局域网中的该设备上接收到连接请求。其他局域网内的设备可以通过这个IP地址来访问服务器。
简而言之,"localhost"指向本地计算机自身,而"192.168.3.94"是指定了一个具体的IP地址,可以被局域网内的其他设备访问。
吃一堑长一智,分享出来给大家避坑
更多关于HarmonyOS 鸿蒙Next:求助 http.request 在本机部署服务器预览器可正常Post但本地模拟器测试服务端一直回复400 Bad Request的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
你用的本机服务器后台,所以地址是192.168.3.94(有些事localhost或者127.0.0.1),此时无论是真机还是模拟器这个地址访问到的都是你的模拟器地址而不是你的电脑上的服务器后台,你访问不到的才会报错400。参照Android开发模拟器想要访问到自己电脑的服务器后台将访问地址定位10.0.2.2,才是android模拟器会自动映射到宿主电脑的地址。至于DevEco Studio是哪个地址这个可能需要你再找找相关资料
好的,感谢指导。
不过我这样写,preview是可以访问到服务器的,文中有日志可以看到。具体模拟器为啥不行,可能还是得看下。刚用了10.0.2.2也不行,
我这只是解答了造成访问不到的接口的原因,10.0.2.2只是提供了一个思路,10.0.2.2应该是不行的,后续的解决方案可能需要你再继续往下去研究了,或者提个工单。
问题找到了,是服务器原因,我在帖子下面也回复了详细信息。感谢!
在HarmonyOS鸿蒙Next中,http.request
在本机部署服务器预览器可以正常Post,但在本地模拟器测试时服务端一直回复400 Bad Request,可能是由于以下原因:
-
请求头问题:模拟器可能未正确设置请求头,如
Content-Type
或Accept
,导致服务器无法识别请求格式。 -
请求体格式:模拟器发送的请求体可能与服务器期望的格式不匹配,如JSON格式错误或缺少必要字段。
-
URL编码:模拟器发送的URL可能未正确编码,导致服务器无法解析请求路径或参数。
-
跨域问题:模拟器可能未正确处理跨域请求,导致服务器拒绝请求。
-
模拟器环境限制:模拟器可能与真实设备环境存在差异,导致某些请求行为不一致。
-
服务器配置:服务器可能对模拟器请求进行了特殊处理或限制,导致返回400错误。
-
网络配置:模拟器的网络配置可能存在问题,导致请求无法正确发送或接收。
-
API版本兼容性:模拟器使用的API版本可能与服务器不兼容,导致请求失败。
-
请求超时:模拟器可能未设置合理的请求超时时间,导致请求在服务器处理前被中断。
-
日志记录:检查模拟器和服务器的日志,寻找具体的错误信息或线索。
建议检查上述可能的原因,逐一排查并验证,以解决400 Bad Request问题。