как вызвать команду curl из mule4

Мне нужно загрузить файл в API. У меня есть для этого команда curl, и я могу успешно загрузить через почтальона. Но теперь я хочу вызвать эту команду curl через MuleSoft? как мы можем сделать это? Я пробовал через компонент Execute (через движок Groovy), но файл загружается, и в журнале консоли нет ошибок.

КОМАНДА CURL curl -H "apiAccessKeyId: USERNAME" -H "apiSecretAccessKey: PASSWORD" -H "Accept: application / json" --form "file = @ C: \ Files \ medialist.csv" --form "params = {Type : Import} "-X POST http://mysuperserver/media/upload/

Предложения, пожалуйста?


person gunjan gupta    schedule 21.05.2020    source источник


Ответы (1)


Не следует пытаться выполнить команду curl из приложения Mule. Я категорически не рекомендую это делать. Вместо этого вы должны использовать компоненты и соединители Mule для воспроизведения тех же запросов.

В этой конкретной ситуации вы можете использовать файловый соединитель для чтения файла, преобразование DataWeave для генерации запроса данных из нескольких частей с вложением и соединитель HTTP-запроса для отправки того же запроса и воспроизведения того же HTTP-запроса, который выполняет curl.

Например, это будет выглядеть примерно так в представлении XML:

    <flow name="so-file-http-request-sendFlow">
        <file:read doc:name="Read" path="c:\files\medialist.csv"/>
        <ee:transform doc:name="Transform Message">
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
output multipart/form-data
---
{
    parts : {
        params : {
          headers : {
            "Content-Type": "text/plain"
          },
          content : "{Type=import}"
        },
        file : {
              headers : {
                "Content-Disposition" : {
                    "name": "file",
                    "filename": "medialist.csv"
                },
                "Content-Type" : "application/csv"
              }     
            }
        }      
}]]></ee:set-payload>
            </ee:message>
        </ee:transform>
        <http:request method="POST" doc:name="Request" config-ref="HTTP_Request_configuration" path="/media/upload/">
            <http:headers ><![CDATA[#[output application/java
---
{
    Accept : "application/json",
    apiAccessKeyId : "USERNAME",
    apiSecretAccessKey : "PASSWORD"
}]]]></http:headers>
        </http:request>
    </flow>

Для посмотрите, соответствует ли запрос тому, что отправляет CURL.

person aled    schedule 21.05.2020
comment
Это был пример, чтобы прояснить подход, который вы должны адаптировать к своим потребностям и заставить его работать. Это неполное, работающее приложение. Я вижу, что вы отправили еще один ответ, основанный на этом решении. Я считаю, что это означает, что ответ был полезным и мог быть принят как действительный. - person aled; 22.05.2020