2016-09-12 3 views
0

Я вызываю REST (PHP) из HTTP-запроса Mule, используя параметр запроса-param.Mule HTTP-запрос: ошибка-параметр-запрос с большой строкой

Это прекрасно работает, с небольшими параметрами!

Но один из параметров ("rest_data") является файлом содержимого (Base64 encoded). Когда содержимое файла велико (> ~ 8K), запрос завершился с ошибкой. Я думаю, что параметры не поддерживают большие строки.

Какие должны быть способом использовать тело вместо запросов пары на Mule в этом случае?

Смотрите файл конфигурации:

<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

Я не изменил и не работал, ни с небольшим файлом в настоящее время. Я потребляю PHP Rest (изменение невозможно!) На Mule. Хотелось бы это понять, что данные «rest_data »не больше в параме, но теперь остаются на теле? – Muka

+0

Если API REST, который вы потребляете, должен отправить эти данные в качестве параметра запроса, то вы не можете сделать это, потому что так оно и было разработано. – afelisatti

0

Я столкнулся с подобной проблемой при вызове API GIS REST. Попробуйте ввести код ниже. Для почтового запроса вы можете использовать полезную нагрузку как 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

Смежные вопросы