2013-02-17 8 views
2

Короткие: Я хочу опубликовать пару параметров (например, user = admin, key = 12345678), используя метод POST на странице PHP (например, локальный/пост-debug.php). Сценарий будет читать значения $ _POST и делать что угодно.Mule ESB - Как создать HTTP-запрос с методом POST (отправка параметров)

Мои вопросы:

1. Как я могу получить пример ниже, чтобы работать?

2. Как создать полезную нагрузку на карту с параметрами POST из кодированной полезной нагрузки JSON и отправить ее в скрипт PHP?

Ниже представлен изолированный случай. Я пытаюсь запустить (параметры «прочитаны» из конечной точки HTTP). Я звоню прямо из браузера следующий URL:

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

MULE Flow

Основной 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.

Я рассмотрел многие подобные вопросы, но ни один не дал мне правильный путь.

+0

Вы можете решить вопрос 1 с помощью шаблона прокси-сервера HTTP, но это не сработает для вопроса 2. Вопрос 2 о возможном сценарии, который вы хотите запустить? Если да, то нет смысла отвечать на вопрос 1, и мы можем сосредоточиться исключительно на вопросе 2. –

+0

Благодарим за отзыв. Да, я хочу запустить сценарий 2. Я просто попытался изолировать проблему в приведенном примере. –

ответ

6

Вот решение для вопроса 2 (отвечая на вопрос-не поможет):

<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-properties распространять все заголовки ответов от вызова сценария PHP обратно к исходному вызывающему. Удалите его, если вам все равно.

+0

Он отлично работает. –

+0

Конечно, большое спасибо за изучение этого. –

+0

Прохладный, я рад, что это работает на ваше удовлетворение :) –

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"/> 
+0

Спасибо, но не повезло с POST. Вот ошибка, которую я иногда получаю: http://pastebin.com/LfJu8Kbt –

+0

Я только что заметил, что установленный вами хост не является допустимым. Обновленный ответ соответственно – genjosanzo

+0

Это не сработало, но спасибо за ваше время. –

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; 

    } 

}