2017-08-10 24 views
2

我想實現這個場景邊界:WSO2缺少的multipart/form-data發佈

wso2Proxy發送POST到joao.php

joao.php得到的值id並返回。

如果我從瀏覽器中調用joao.php,並使用一個名爲id的字段,它可以工作。如果我在WSO2代理中執行相同的操作,則會出現php錯誤在multipart/form-data POST中缺少邊界。

我用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形式發佈,而不是多部分/數據。

其結果是,這些都是針對多/數據使建設者和格式化:

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

什麼是你的ESB版本?發佈您的突觸配置。 – Bee

+0

WSO2 ESB 6.1.1。我已編輯添加axis2.xml。 Thx – John

+0

發佈您的突觸配置 – Bee

回答

0

這是一個bug。將在下一個版本中修復。

+0

修正了這個錯誤嗎? –

+0

這將在即將到來的APIM 2.2.0版本中修復。計劃在三月中旬。 –

+0

ESB中的問題也會解決嗎?當我嘗試通過代理服務傳遞maltipart/form-data時,我在ESB中遇到了這個錯誤。我正在使用服務器的5.0.0版本。 –

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> 

有關更多詳細信息,請參閱以下小節。

Ushani Balasooriya's Blog

這裏是樣品要求

enter image description here