问题描述
问题:
我正在尝试为我的虚拟机启动开机命令。我能够在Windows命令行中做到这一点,而curl则使用
传递有问题的数据curl "http://127.0.0.1:8697/api/vms/vm_id/power" -X PUT --header "Content-Type: application/vnd.vmware.vmw.rest-v1+json" --header "Accept: application/vnd.vmware.vmw.rest-v1+json" --header "Authorization: Basic MyToken" -d on
{"power_state": "poweredOn}
我不太理解标头和数据的概念。我所知道的是,我需要在发布请求的正文中的“”上插入操作。对于所有仍处于打开状态的Chrome标签,我将PC上的RAM置于微不足道的位置。似乎我撞到了砖墙。任何预先提供的帮助。
代码:
import requests
import json
api_token = MyToken
desired_vm_id = vm_id
headers = {'Accept': 'application/vnd.vmware.vmw.rest-v1+json','Authorization': 'Basic {0}'.format(api_token)}
api_url_base = 'http://127.0.0.1:8697/api/vms/'
def get_vm_status():
api_url = '{0}{1}/power'.format(api_url_base,desired_vm_id)
response = requests.get(api_url,headers=headers)
if response.status_code == 200:
response = json.loads(response.content)
if (response['power_state']) == 'poweredOff':
response_for_put = requests.put(api_url,headers = headers,data = {'operation': 'on'})
result = json.loads(response_for_put.content)
print(result['Message'])
else:
print('VM already running:',response)
else:
return None
get_vm_status()
结果:
Content type not supported
文档: from vmware workstation pro dockumentation
解决方法
您似乎在Content-Type
命令中设置了curl
标头,但在Python代码中却没有。尝试更改此行:
headers = {'Accept': 'application/vnd.vmware.vmw.rest-v1+json','Authorization': 'Basic {0}'.format(api_token)}
对此:
headers = {'Content-Type': 'application/vnd.vmware.vmw.rest-v1+json','Accept': 'application/vnd.vmware.vmw.rest-v1+json','Authorization': 'Basic {0}'.format(api_token)}
,
您可以尝试以下方法:
response = requests.put(api_url,headers=headers,data='on')
然后您可以直接读取JSON响应:
response.json()