2016-09-12 10 views
0

私は、query-paramを使用してMule HTTPリクエストからREST(PHP)を呼び出しています。Mule HTTPリクエスト:大きな文字列を含むquery-paramエラー

これは小さなパラメータデータでうまくいきます。

しかし、パラメータ(rest_data)の1つはコンテンツファイル(Base64エンコード)です。ファイルの内容が大きい場合(>〜8K)、要求は失敗します。 paramsは大きな文字列をサポートしていないと思います。

この場合、本文の代わりにquery-paramを使用する方法は?

設定ファイルを参照してください:あなたがhttp:requestコンポーネント前set-payloadコンポーネントでペイロードにそのrest_dataを追加する必要がありますので

<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リクエストのボディに送信されます。

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

それが失敗した理由です、大規模なデータのクエリのparamsを使用することをお勧めではありません。

+0

私が変更され、現在どちらの小さなファイルで、動作しませんでした。私はMuleでPHP Rest(変更不可!)を消費しています。それは、データがデータではないことを理解するためには必要ですが、今は体に留まりますか? – Muka

+0

あなたが消費しているREST APIがそのデータをクエリパラメータとして送信する必要がある場合、それが設計されているので、あまりできることはありません。 – afelisatti

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

私たちは、HTTP

0

上で大きなデータ構造を送信する代わりに、GETのPOSTメソッドを使用する必要がありますが、パラメータが長いクエリを実行すると、あなたが考えるだろう置きますクエリ文字列をHTTPリクエスト本体に渡すには、GETではなくPOSTメソッドに要求タイプを設定します。ここで

は、ページリストは、URLでどのように多くの文字の制限である:https://boutell.com/newfaq/misc/urllength.html

は、クエリ文字列(名前/値のペア)がGETリクエスト

GET /something/?name1=value1&name2=value2 HTTP/1.1 Host: yourhostのURLに変換しますことを忘れないでください

POST /something/ HTTP/1.1 Host: yourhost name1=value1&name2=value2

関連する問題