wso2在multipart / form-data POST中缺少边界

时间:2017-08-10 15:33:26

标签: wso2

我正在尝试实施这种情况:

wso2Proxy将POST发送到joao.php

joao.php获取id值并返回它。

如果我从浏览器调用joao.php,并且带有名为id的字段的表单可以正常工作。如果我在WSO2代理中执行相同的操作,我会在multipart / form-data POST中获取php错误缺失边界。

我使用TCPMon分析调用,WSO2发送Content-Type:multipart / form-data但没有边界。

有人能指出我正确的方向吗?

以下是2个电话:

来自浏览器:

POST /joao.php HTTP/1.1
Host: localhost:7590
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarytcskUke6yP5MNOzt
Origin: http://localhost:7590
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8
Referer: http://localhost:7590/joao.php
Upgrade-Insecure-Requests: 1
DNT: 1
Content-Length: 135
Connection: keep-alive

------WebKitFormBoundarytcskUke6yP5MNOzt
Content-Disposition: form-data; name="id"

sd
------WebKitFormBoundarytcskUke6yP5MNOzt--

来自WSO2代理:

POST /joao.php HTTP/1.1
Content-Type: multipart/form-data
Content-Length: 264
Host: localhost:7590
Connection: Keep-Alive
User-Agent: Synapse-PT-HttpComponents-NIO

--MIMEBoundary_4e039051f0592881a6551113d958f38436c2e8eef5b85bba
Content-Disposition: form-data; name="id"
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 8bit

teste123
--MIMEBoundary_4e039051f0592881a6551113d958f38436c2e8eef5b85bba--

我在axis2.xml上有以下注释部分:

<!--messageFormatter contentType="multipart/form-data"
                    class="org.wso2.carbon.relay.ExpandingMessageFormatter"/-->

<!--messageBuilder contentType="multipart/form-data"
                    class="org.wso2.carbon.relay.BinaryRelayBuilder"/-->

这是因为如果我启用它们,那么内容将以XML格式发布,而不是多部分/数据。

因此,这些是为multipart / data启用的构建器和格式化程序:

<messageFormatter class="org.apache.axis2.transport.http.MultipartFormDataFormatter" contentType="multipart/form-data"/>

<messageBuilder class="org.apache.axis2.builder.MultipartFormDataBuilder" contentType="multipart/form-data"/>

以下是我正在使用的代理配置:

<proxy xmlns="http://ws.apache.org/ns/synapse"
   name="testeSendFile"
   transports="http https"
   startOnLoad="true">
<description/>
<target>
  <inSequence>
     <payloadFactory media-type="xml">
        <format>
           <params xmlns="">
              <id>teste123</id>
           </params>
        </format>
        <args/>
     </payloadFactory>
     <property name="messageType" value="multipart/form-data" scope="axis2"/>
     <property name="DISABLE_CHUNKING"
               value="true"
               scope="axis2"
               type="STRING"/>
     <log level="full"/>
     <send>
        <endpoint>
           <http method="POST" uri-template="http://localhost:7590/joao.php"/>
        </endpoint>
     </send>
     <log level="full"/>
  </inSequence>
</target>
</proxy>

3 个答案:

答案 0 :(得分:0)

如果您只是将文字值作为表单数据发送,则可以使用application/x-www-form-urlencoded代替form-data

请参阅http://isharapremadasa.blogspot.com/2014/09/sending-form-data-through-wso2-esb-with.html

答案 1 :(得分:0)

这是bug。将在下一个版本中修复。

答案 2 :(得分:0)

我能够通过将代理服务更改为以下内容来解决此问题。

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
     name="testeSendFile"
     startOnLoad="true"
     statistics="disable"
     trace="disable"
     transports="http,https">
  <target>
    <outSequence>
       <property name="OUT_ONLY" value="true"/>
       <send/>
    </outSequence>
    <endpoint>
       <address uri="http://localhost:8080/upload"/>
    </endpoint>
  </target>
  <description/>
</proxy>

有关更多详细信息,请参阅以下bolg。

Ushani Balasooriya's Blog

以下是样本请求

enter image description here