Schrift
[thread]11169[/thread]

xml per POST an CGI-Script geht nicht

Leser: 1


<< >> 4 Einträge, 1 Seite
peyot-l
 2008-01-21 20:01
#104995 #104995
User since
2008-01-21
2 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich weiß nicht ob ich hier richtig bin aber in einem Flash-forum kann mir auch nicht weitergeholfen werden. Also mein Problem:

ich will XML-Daten vom Actionsscript an ein CGI-File per "POST" senden. Leider kommt dabei aber nichts an. Versende ich ein LoadVars-Objekt per "POST" funktioniert das aber schon. folgenden AS-Quellcode dazu:


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
path = "../cgi-bin/";
lvOut = new LoadVars();

laden.onRelease = function()
{
lvOut.user = "andi"
lvOut.send(path+"posttest.pl", "_blank", "POST");
};

xmlladen.onRelease = function()
{
loginXML = new XML();
loginElement = loginXML.createElement("LOGIN");
loginElement.attributes.user = "andi";
loginXML.appendChild(loginElement);

loginXML.send(path+"posttest.pl", "_blank", "POST");
}



Der Quellcode von posttest.pl sieht dann so aus:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl -w

print "Content-type: text/html\n\n";

if($ENV{'REQUEST_METHOD'} eq 'GET')
{
        print "GET!<br>";
        print $ENV{'QUERY_STRING'};
        
}
else
{
        $cont_length = $ENV{'CONTENT_LENGTH'};
        read(STDIN, $Daten, $cont_length, 0);
        
        print"POST! cont_length = $cont_length<br>";
        print "Daten: $Daten";
}



Wird laden.onRelease = function() ausgeführt, gibt mir das CGI-Script aus:

POST! cont_length = 9
Daten: user=andi

->so wie es sein soll!!!

Wird xmlladen.onRelease = function() ausgeführt, gibt mir das CGI-Script aus:

POST! cont_length = 59
Daten:

mehr nicht!!! Ein bißchen wenig. Mach ich es mit "GET". Funktionierts auch mit dem XML.

Weiß jemand was ich falsch mache? liegts an dem Actionscript oder an meinem Perl?

Danke schonmal
murphy
 2008-01-22 11:36
#105014 #105014
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
peyot-l+2008-01-21 19:01:27--
[...]
POST! cont_length = 59
Daten:
[...]


Da die Content-Length nicht 0 ist, kommen ja ganz offensichtlich Daten an. Es könnte aber sein, dass Dein Webbrowser diese einfach nicht darstellt, sondern alle ihm unbekannten XML-Tags ignoriert, denn schließlich hast Du mittels print "Content-type: text/html\n\n"; ausgedrückt, dass der Inhalt der generierten Seite HTML ist und Du gibst die Daten aus der CGI-Anfrage ohne Quoting direkt aus.

Ich würde also mal nachschauen, ob mehr sichtbar wird, wenn Du den Content-Type auf text/plain setzt.


PS: Abgesehen davon erzeugt print "Content-type: text/html\n\n"; keinen gültigen HTTP-Header, denn die Zeilen eines HTTP-Headers müssen zwingend mit "\x0d\x0a" abgeschlossen werden, nicht mit irgendeinem Zeilentrenner. Überhaupt wäre es wohl besser, das Einlesen der Anfragedaten und das Generieren der Header dem CPAN:CGI-Modul zu überlassen.
When C++ is your hammer, every problem looks like your thumb.
peyot-l
 2008-01-22 12:52
#105015 #105015
User since
2008-01-21
2 Artikel
BenutzerIn
[default_avatar]
hallo danke erstmal, werde das gleich mal testen ob´s an dem lag.

wegen dem CGI: ich weiß, dass man mit der param-Methode von CGI die Anfragedaten einlesen kann. Aber wie geht das in meinem Fall? Ich weiß nicht welchen Übergabeparameter ich der param('?')-Funktion mitgeben soll!
murphy
 2008-01-22 14:18
#105021 #105021
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Da der Typ Deiner per POST übertragenen Daten vermutlich application/xml statt des gängigen application/x-www-form-urlencoded oder multipart/form-data ist, kann das CPAN:CGI-Modul die Daten nicht selbst parsen sondern speichert sie in dem synthetischen Parameter mit dem Namen POSTDATA.

Du könntest also zum Beispiel folgendes machen (ungetestet):
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
use strict;
use warnings;

use CGI qw/:standard/;
use XML::Simple;
use Data::Dumper;

my $params = XMLin(param('POSTDATA'));

print header(-type => 'text/plain');
print Dumper $params;

When C++ is your hammer, every problem looks like your thumb.
<< >> 4 Einträge, 1 Seite



View all threads created 2008-01-21 20:01.