HTTP-запрос Mule: ошибка запроса-параметра с большой строкой

Я вызываю 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>

0

Решение

Все, что находится в полезной нагрузке, будет отправлено в теле HTTP-запроса, поэтому вы должны добавить эти rest_data к полезной нагрузке с помощью set-payload компонент перед http:request составная часть:

<set-payload value="#[flowVars.params.rest_data**]"/>

Не рекомендуется использовать параметры запроса для больших данных, поэтому он не работает.

0

Другие решения

Я столкнулся с подобной проблемой при вызове 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>
0

Мы должны использовать метод POST вместо GET для отправки больших структур данных по HTTP

0

Когда вы запрашиваете длинные параметры, вы можете подумать о том, чтобы поместить строку запроса в тело 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

0
По вопросам рекламы [email protected]