Я вызываю REST (PHP) из Mule HTTP Request, используя параметр запроса.
Это работает отлично, с небольшими данными параметров!
Но одним из параметров («rest_data») является файл содержимого (в кодировке Base64). Когда содержимое файла большое (> ~ 8K), запрос не выполняется. Я думаю, что params не поддерживает большие строки.
Каким должен быть способ использования тело вместо запрос-пары на мула в этом случае?
Смотрите конфигурационный файл:
<http:request-config name="HTTP_Request_Configuration" host="164.164.164.233" port="80" basePath="/crmtec/service/v4_1/rest.php" doc:name="HTTP Request Configuration">
</http:request-config>
<http:request config-ref="HTTP_Request_Configuration" path="/" method="POST" doc:name="HTTP Documento">
<http:request-builder>
<http:query-param paramName="method" value="set_document_revisions"/>
<http:query-param paramName="input_type" value="JSON"/>
<http:query-param paramName="response_type" value="JSON"/>
<http:query-param paramName="rest_data" value="#[flowVars.params.rest_data]"/>
</http:request-builder>
<http:success-status-code-validator values="0..599"/>
</http:request>
Все, что находится в полезной нагрузке, будет отправлено в теле HTTP-запроса, поэтому вы должны добавить эти rest_data к полезной нагрузке с помощью set-payload
компонент перед http:request
составная часть:
<set-payload value="#[flowVars.params.rest_data**]"/>
Не рекомендуется использовать параметры запроса для больших данных, поэтому он не работает.
Я столкнулся с подобной проблемой при вызове GIS REST API. Попробуйте код ниже. Для почтового запроса вы можете указать полезную нагрузку в виде MAP всех параметров. Хорошо спроектированный REST должен справиться с этим —
<set-payload value='#[{'method':'set_document_revisions', 'input_type':'JSON', 'response_type':'JSON','rest_data':flowVars.params.rest_data}]' />
<http:request config-ref="HTTP_Request_Configuration" path="/" method="POST" doc:name="HTTP Documento">
<http:success-status-code-validator values="0..599"/>
</http:request>
Мы должны использовать метод POST вместо GET для отправки больших структур данных по HTTP
Когда вы запрашиваете длинные параметры, вы можете подумать о том, чтобы поместить строку запроса в тело HTTP-запроса, установить тип запроса в метод POST вместо GET.
Вот список страниц, ограничивающий количество символов в URL: https://boutell.com/newfaq/misc/urllength.html
Помните, что строка запроса (пары имя / значение) преобразуется в URL запроса GET
GET /something/?name1=value1&name2=value2 HTTP/1.1 Host: yourhost
POST /something/ HTTP/1.1 Host: yourhost name1=value1&name2=value2