我正在尝试实施这种情况:
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>
答案 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。
以下是样本请求