You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用simulator测试govmomi vapi rest客户端时出现404 Not Found错误

问题原因
  • 你测试代码中使用的simulator.ESX()是模拟独立ESXi主机的模型,ESXi原生不提供vAPI REST服务,不会注册/rest/*路径下的相关路由,所以请求session接口时直接返回404。
  • 你之前用simulator跑通的是SOAP协议相关的客户端测试,SOAP接口是ESXi和vCenter共有的能力,所以ESX模型下可以正常运行,但vAPI REST是vCenter专属的接口集,ESX模型不会加载这部分逻辑。
  • 你匿名导入的github.com/vmware/govmomi/vapi/simulator只会在vCenter模拟模型(VPX)下自动注册REST路由,ESX模型下不会触发路由注册。
修复方案

只需要把测试代码中的模型初始化从simulator.ESX()替换为simulator.VPX()即可,VPX模型对应模拟vCenter Server实例,会自动加载所有vAPI REST接口的模拟实现。
修复后的测试代码核心部分如下:

func TestGetRestClient(t *testing.T){
 ctx := context.Background()
 // 替换ESX()为VPX(),模拟vCenter环境
 model := simulator.VPX()
 defer model.Remove()
 err := model.Create()
 if err != nil {
  t.Fatal(err)
 }
 server := model.Service.NewServer()
 defer server.Close()
 testUrl := server.URL
 var client RestClient = RestClient{url: testUrl,}
 _, err := client.GetRestClient(ctx)
 if err != nil {
  t.Errorf("err = %v", err)
  return
 }
}

注意:原测试代码里把net/url包名和局部变量重名了,虽然不影响当前逻辑,但建议把局部变量改名为testUrl这类名字,避免后续调用url包方法时出现变量遮蔽问题。

改完之后再运行测试,就可以正常完成REST客户端登录,不会再出现404错误。你的业务代码本身没有问题,对接真实vCenter时可以正常运行,问题仅出在测试用的模拟环境选型错误。

内容的提问来源于stack exchange,提问作者temptech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:03:29