Отправить файл XML, используя curl в качестве метаданных - PullRequest
0 голосов
/ 24 октября 2018

'У меня есть огромный XML-файл, который мне нужно PUT в конечной точке.Моя команда curl в настоящее время выглядит следующим образом:

curl -X PUT --user user:pass https://<end-point>/foo/bar/id \

    -H 'Content-Type: application/json' \

    -d '{
  "medata": "${METADATA}"
}'

METADATA У меня исходит:

METADATA=$(cat cost_meta.xml)

И cost_meta.xml выглядит примерно так:

<?xml version="1.0" encoding="UTF-8"?>
<md:EntityDescriptor ID="_ydkjknxyky6vepon" 
.
.
index="0"/></md:SPSSODescriptor></md:EntityDescriptor>

С самим XML все в порядке.Я только что обрезал его, чтобы опубликовать здесь.

Когда я запускаю команду curl, я получаю ОШИБКУ

Failed to upsert service provider due to invalid JSON input.zsh: command not found: -H
zsh: command not found: -d

Итак, я попытался сделать это по-другому:

curl -H "Content-Type: text/xml" -d @cost_meta.xml -X POST --user user:pass https://<end-point>/foo/bar/id

Но это дает мне ОШИБКУ

<code><!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>417 Expectation Failed</title>
</head><body>
<h1>Expectation Failed</h1>
<p>The expectation given in the Expect request-header
field could not be met by this server.
The client sent<pre>
    Expect: 100-continue

Поддерживается только ожидание 100.

Так что я не уверен, что делать дальше.Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 24 октября 2018

Ваш сценарий выглядит нормально, кроме дополнительных новых строк и соответствующих сообщению об ошибке, добавьте -H 'Expect:', поэтому напишите

curl -X PUT --user user:pass https://<end-point>/foo/bar/id \
     -H 'Content-Type: application/json' -H 'Expect:' \
     -d '{"medata": "'"$(cat cost_meta.xml)"'"}'
...