@SiTiS

Python + Subprocess + Curl = 400, как быть?

Здравствуйте!
Имеется следующий код
cmd = '''curl -s --unix-socket /var/lib/lxd/unix.socket -X POST -d '{"name": "xenial10", "source": {"type": "image", "protocol": "simplestreams", "server": "https://cloud-images.ubuntu.com/daily", "alias": "16.04"}}' a/1.0/containers'''
args = cmd.split()
process = subprocess.Popen(args, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
stdout = stdout.decode("utf-8")
stdout = json.loads(stdout)
return stdout

В итоге он не выполняется и отдает ошибку: 400 Bad Request: malformed Host header

Если запускать по SSH:
curl -s --unix-socket /var/lib/lxd/unix.socket -X POST -d '{"name": "xenial10", "source": {"type": "image", "protocol": "simplestreams", "server": "https://cloud-images.ubuntu.com/daily", "alias": "16.04"}}' a/1.0/containers

то команда выполняется.

Насколько я понимаю, проблема в одинарных кавычках - '{"name... и ...4"}}' или нет?
Так как python отдает код:
curl -s --unix-socket /var/lib/lxd/unix.socket -X POST -d \'{"name": "xenial10", "source": {"type": "image", "protocol": "simplestreams", "server": "https://cloud-images.ubuntu.com/daily", "alias": "16.04"}}\' a/1.0/containers

т.е. заменяет ' на \' , а такая команда уже не работает даже в SSH.
Как решить данную проблему?
  • Вопрос задан
  • 325 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы