views:

402

answers:

2

All,

I'm trying to find out, unambiguously, what method (GET or POST) Flash/AS2 uses with XML.sendAndLoad.

Here's what the help/docs (http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs%5FParts&file=00002340.html) say about the function

Encodes the specified XML object into an XML document, sends it to the specified URL using the POST method, downloads the server's response, and loads it into the resultXMLobject specified in the parameters.

However, I'm using this method to send XML data to a Java Servlet developed and maintained by another team of developers. And they're seeing log entries that look like this:

GET /portal/delegate/[someService]?svc=setPayCheckInfo&XMLStr=[an encoded version of the XML I send]

After a Google search to figure out why the POST shows up as a GET in their log, I found this Adobe technote (http://kb2.adobe.com/cps/159/tn%5F15908.html). Here's what it says:

When loadVariables or getURL actions are used to send data to Java servlets it can appear that the data is being sent using a GET request, when the POST method was specified in the Flash movie.

This happens because Flash sends the data in a GET/POST hybrid format. If the data were being sent using a GET request, the variables would appear in a query string appended to the end of the URL. Flash uses a GET server request, but the Name/Value pairs containing the variables are sent in a second transmission using POST. Although this causes the servlet to trigger the doGet() method, the variables are still available in the server request.

I don't really understand that. What is a "GET/POST hybrid format"?

Why does the method Flash uses (POST or GET) depend on whether the data is sent to a Java servlet or elsewhere (e.g., a PHP page?)

Can anyone make sense of this? Many thanks in advance!

Cheers, Matt

+2  A: 

Have you try doing something like that :

var sendVar=new LoadVars();
var xml=new XML("<r>test</r>");
sendVar.xml=xml;
sendVar.svc="setPayCheckInfo";

var receiveXML=new XML();
function onLoad(success) {
    if (success) {
     trace("receive:"+receiveXML);
    } else {
     trace('error');
    }
}
receiveXML.onLoad=onLoad;
sendVar.sendAndLoad("http://mywebserver", receiveXML, "POST");
Patrick
+2  A: 

The hybrid format is just a term Macromedia invented to paint over its misuse of HTTP.

HTTP is very vague on what you can do with GET and POST. But the convention is that no message body is used in GET. Adobe violates this convention by sending parameters in the message body.

Flash sends the same request regardless of the server. You have problem in Servlet because most implementation (like Tomcat) ignores message body for GET. PHP doesn't care the verb and it processes the message body for GET too.

ZZ Coder
The "hybrid format" is actually quite common and I have always thought that it is perfectly valid. So I'm afraid I disagree there being a convention. For example, a .NET page with query parameters and server form does the same on postback.
Skrim
(Yes I'm aware of the irony of giving an example of standards using .NET. :))
Skrim
I bet you are talking about a POST, not GET. It's common to include query parameters in POST. That's still a POST, nothing hybrid about it.
ZZ Coder
True, thanks for the correction!
Skrim