2

短い: POST メソッドを使用して、いくつかのパラメーター (user=admin、key=12345678 など) を PHP ページ (localhost/post-debug.php など) に投稿したいと考えています。スクリプトは $_POST 値を読み取り、何でもします。

私の質問は次のとおりです。

1. 以下の例を機能させるにはどうすればよいですか?

2. JSON でエンコードされたペイロードから POST パラメーターを使用して Map ペイロードを作成し、それを PHP スクリプトに送信するにはどうすればよいですか?

以下は、私が実行しようとしている孤立したケースです (パラメーターは HTTP エンドポイントから「読み取られます」)。ブラウザから次の URL を直接呼び出しています。

http://localhost:8081/httpPost?user=admin&key=12345678

ミュールの流れ

基礎となる XML:

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" version="CE-3.3.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd ">
    <flow name="httpPostTestFlow1" doc:name="httpPostTestFlow1">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="httpPost" doc:name="HTTP"/>
            <http:body-to-parameter-map-transformer doc:name="Body to Parameter Map"/>

        <echo-component doc:name="Echo"/>
        <http:outbound-endpoint exchange-pattern="request-response" host="localhost/post-debug.php" port="80"  contentType="application/x-www-form-urlencoded" doc:name="HTTP" />
    </flow>
</mule>

MuleStudio 1.3.2、Mule ESB v.3.3 を使用しています。

多くの同様の質問を確認しましたが、正しい軌道に乗ったものはありません。

4

3 に答える 3

7

質問 2 の解決策は次のとおりです (質問 1 に答えても役に立ちません)。

<flow name="httpPostTestFlow1">
    <http:inbound-endpoint exchange-pattern="request-response"
        host="localhost" port="8081" path="httpPost" />
    <json:json-to-object-transformer
        returnClass="java.util.Map" />
    <http:outbound-endpoint exchange-pattern="request-response"
        host="localhost" port="80" path="post-debug.php" method="POST"
        contentType="application/x-www-form-urlencoded" />
    <copy-properties propertyName="*" />
</flow>

以下を使用して、正常に動作することを確認しました。

curl -H "Content-Type: application/json" -d '{"param1":"value1","param2":"value2"}' http://localhost:8081/httpPost

copy-propertiesPHP スクリプトの呼び出しからのすべての応答ヘッダーを元の呼び出し元に伝達するために使用していることに注意してください。気にしなければ外してください。

于 2013-02-18T17:37:19.060 に答える
0

少し古い質問ですが、同じ問題にぶつかっただけです。「body-to-parameter-map-transformer」を機能させることができなかったので、カスタム Java コンポーネントを投入しました。URLEncoded パラメータ文字列を HashMap に解析します。それに基づいて変数を設定します。

import java.util.HashMap;
import java.util.Iterator;

import org.json.JSONException;
import org.json.JSONObject;


public class ParseParams {

    public static HashMap<String, String> jsonToMap(String t) throws JSONException {

        HashMap<String, String> map = new HashMap<String, String>();
        JSONObject jObject = new JSONObject(t);
        Iterator<?> keys = jObject.keys();

        while( keys.hasNext() ){
            String key = (String)keys.next();
            String value = jObject.getString(key); 
            map.put(key, value);

        }

        return map;

    }

}
于 2015-01-07T23:10:21.273 に答える
0

次のように送信エンドポイントを構成しようとしましたか:

<http:outbound-endpoint exchange-pattern="request-response" host="localhost" port="80" path="post-debug.php" contentType="application/x-www-form-urlencoded" doc:name="HTTP" method="POST"/>
于 2013-02-17T12:59:23.540 に答える