Flex HTTPService не включает заголовок Content-Length? - PullRequest
0 голосов
/ 29 сентября 2008

Я пытаюсь заставить приложение Flex взаимодействовать с пользовательским веб-сервером Python, который я разработал.

Я замечаю, что не могу прочитать полученные постданные, поскольку Flex, похоже, не включает Content-Length в заголовки HTTP. (Мой веб-сервер работает при публикации в обычном HTML)

Это известная проблема? какие-либо идеи, как установить заголовок content-length?

Вот текущие отправляемые заголовки:

Host: localhost:7070

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0

.3

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-us,en;q=0.5

Accept-Encoding: gzip,deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Keep-Alive: 300

Connection: keep-alive

Ответы [ 3 ]

4 голосов
/ 29 сентября 2008

Должно быть, если вы установите свойство метода HTTPService в POST. Если вы его опустите, по умолчанию будет GET, и параметры будут отправлены как часть строки запроса, а не как данные POST.

Я настроил этот сценарий, используя этот код Flex:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application  layout="absolute"
    xmlns:mx="http://www.adobe.com/2006/mxml"
    creationComplete="init()">

    <mx:HTTPService id="service" 
        url="http://localhost:8000/"
        method="POST"
        resultFormat="text"
        result="response.htmlText=ResultEvent(event).result.toString()"/>

    <mx:Text id="response" width="100%" height="100%"/>

    <mx:Script>
        <![CDATA[
            import mx.rpc.events.ResultEvent;
            private function init() : void {
                service.send({
                    foo: "Fred",
                    bar: "Barney"
                });
            }
        ]]>
    </mx:Script>
</mx:Application>

И этот код сервера Python:

#!/usr/bin/env python

import SimpleHTTPServer, BaseHTTPServer, string

class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_POST(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        self.wfile.write("<html><body>")
        self.wfile.write("<b>METHOD:</b> " + self.command)

        # Write out Headers
        header_keys = self.headers.dict.keys()
        for key in header_keys:
            self.wfile.write("<br><b>" + key + "</b>: ")
            self.wfile.write(self.headers.dict[key])

        # Write out any POST data
        if self.headers.dict.has_key("content-length"):
            content_length = string.atoi(self.headers.dict["content-length"])
            raw_post_data = self.rfile.read(content_length) 
            self.wfile.write("<br><b>Post Data:</b> " + raw_post_data) 
        self.wfile.write("</body></html>")
    def do_GET(self):
        self.do_POST()

try:
    BaseHTTPServer.test(MyHandler, BaseHTTPServer.HTTPServer)
except KeyboardInterrupt:
    print 'Exiting...'

И получил такой результат:

METHOD: POST
content-length: 19
accept-language: en-us,en;q=0.5
accept-encoding: gzip,deflate
connection: keep-alive
keep-alive: 300
accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
user-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
accept-charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
host: 10.0.7.61:8000
content-type: application/x-www-form-urlencoded
Post Data: bar=Barney&foo=Fred

Так и должно работать.

0 голосов
/ 10 октября 2008

Как говорит Билл Д., вы почти наверняка не выполняете POST, как мы делаем это все время, добавляя их в наш серверный код, и он наверняка включает Content-Length.

0 голосов
/ 29 сентября 2008

Я не верю, что это известная проблема.

Вы уверены, что Content-Length не отправляется? Вы разместили запрос на HTTP-взаимодействие со стороны вашего браузера; на этой стороне протокола никогда не существует заголовка Content-Length.

...