AS2: xml.sendAndLoad использует POST или GET? - PullRequest
0 голосов
/ 17 декабря 2009

All

Я пытаюсь однозначно выяснить, какой метод (GET или POST) Flash / AS2 использует с XML.sendAndLoad.

Вот что говорят справки / документы (http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002340.html) о функции

Кодирует указанный объект XML в XML-документ, отправляет его указанный URL с использованием метода POST, загружает ответ сервера и загружает его в resultXMLobject указано в параметрах.

Однако я использую этот метод для отправки данных XML в сервлет Java, разработанный и поддерживаемый другой командой разработчиков. И они видят записи в журнале, которые выглядят так:

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

После поиска в Google, чтобы выяснить, почему POST отображается как GET в их журнале, я обнаружил этот технический комментарий Adobe (http://kb2.adobe.com/cps/159/tn_15908.html). Вот что он говорит:

Когда действия loadVariables или getURL используется для отправки данных в сервлеты Java это может появиться, что данные отправляются используя запрос GET, когда POST метод был указан во Flash фильм.

Это происходит потому, что Flash отправляет данные в гибридном формате GET / POST. Если данные были отправлены с помощью GET запрос, переменные будут появляться в строка запроса, добавленная в конец URL. Flash использует GET-сервер запрос, но пары имя / значение содержащие переменные отправляются в вторая передача с использованием POST. Хотя это заставляет сервлет вызвать метод doGet (), переменные по-прежнему доступны в запрос к серверу.

Я действительно не понимаю этого. Что такое гибридный формат GET / POST?

Почему метод, используемый Flash (POST или GET), зависит от того, отправляются ли данные в сервлет Java или в другое место (например, на страницу PHP?)

Кто-нибудь может понять это? Большое спасибо заранее!

Ура, Matt

Ответы [ 2 ]

2 голосов
/ 17 декабря 2009

Гибридный формат - это просто термин, придуманный Macromedia для обозначения своего неправильного использования HTTP.

HTTP очень расплывчат в том, что вы можете делать с GET и POST. Но соглашение заключается в том, что тело сообщения не используется в GET. Adobe нарушает это соглашение, отправляя параметры в теле сообщения.

Flash отправляет один и тот же запрос независимо от сервера. У вас проблема с сервлетом, потому что большая часть реализации (например, Tomcat) игнорирует тело сообщения для GET. PHP не заботится о глаголе и обрабатывает тело сообщения для GET.

2 голосов
/ 17 декабря 2009

Вы пытались сделать что-то подобное:

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");
...