Hallo,
Ich habe schön öfters mal einen Http-Post in C# abgeworfen. Als Daten habe ich dann immer einzelne normale parameter genommen, welche ich wie folgt in den http-body gefüllt habe:
a=asdf&b=dfgh&someeothervalue=asdasd
nun muss ich aber einen http-post für dieses formular machen:
<HTML xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<HEAD>
<TITLE>Debug Post</TITLE>
</HEAD>
<BODY>
<H1>Debug Post</H1>
<FORM ACTION="http://192.168.1.22:8081/unimodmcGwIfApp.cgi" METHOD="POST" ENCTYPE="multipart/form-data">
<TEXTAREA name="data" rows="10" cols="80">
<request>
<getGwMacAddress>
<mac>00:11:22:dd:Ee:fF</mac>
</getGwMacAddress>
</request>
</TEXTAREA>
<P>
<INPUT TYPE="submit" NAME="Submit" VALUE="Submit Form">
</P>
</FORM>
</BODY>
</HTML>
wie ich im firefox mit tamper gesehen habe wird der inhalt nicht wie oben beschrieben gesendet. weiss jemand wie ich diesen vorgang in c# umsetzen kann?
mfG b3nj
-edit-
so ich habe nochmals fleissig gegoogelt.
ich habe noch einen anderen lösungsansatz gefunden:
WebClient client = new WebClient();
NameValueCollection parameters = new NameValueCollection();
parameters.Add("data", @"<?xml version=""1.0"" encoding=""utf-8""?>
<request>
<getGwMacAddress>
<mac>00:11:22:dd:Ee:fF</mac>
</getGwMacAddress>
</request>");
byte[] response = client.UploadValues("http://" + something.IPAddress + ":8081/something.cgi", parameters);
wobei die url stimmt. das eingegebene xml sollte auch ein gültiges xml zurückgeben, ich erhalte als antwort jedoch:
<?xml version="1.0" encoding="utf-8"?>
<response>
<FunctionNotParsable>
<mac>XX:XX:XX:XX:XX:XX</mac>
<retVal>12</retVal>
<retStr>Input XML file does not validate</retStr>
</FunctionNotParsable>
</response>
ich habe mal den cgi-log auf "debug" geschaltet, das folgende kommt dabei raus:
42 [1081655824] INFO main (main.cpp:199) - Started ./unimodmcGwIfApp.cgi
49 [1081655824] INFO main (main.cpp:228) - Got xml from the CGI request [_xml version]"1.0" encoding]"utf-8"_-*\request-* \getGwMacAddress-* \mac00Z11Z22ZddZEeZfF\Omac-* \OgetGwMacAddress-*\Orequest^]
50 [1081655824] INFO main (main.cpp:247) - <?xml ... ?>no found!
55 [1081655824] INFO main (main.cpp:254) - Ended ./something.cgi
hier noch zum vergleich ein funktionierender aufruf mit dem oben angegebenen formular:
56 [1081655824] INFO main (main.cpp:234) - Parsed xml in memory
74 [1081655824] INFO main (Utils.cpp:99) - Parsed style sheet [getFunctionName.xslt]
82 [1081655824] INFO main (Utils.cpp:106) - Applied style sheet [getFunctionName.xslt]
84 [1081655824] INFO main (Utils.cpp:125) - Stripped string
85 [1081655824] INFO main (Utils.cpp:127) - Decoded string
90 [1081655824] INFO main (Utils.cpp:99) - Parsed style sheet [getMac.xslt]
92 [1081655824] INFO main (Utils.cpp:106) - Applied style sheet [getMac.xslt]
93 [1081655824] INFO main (Utils.cpp:125) - Stripped string
94 [1081655824] INFO main (Utils.cpp:127) - Decoded string
95 [1081655824] INFO main (main.cpp:191) - Mac ok
96 [1081655824] INFO GetMacAddress GetMacAddress.cpp:8) - Running
102 [1081655824] INFO main (main.cpp:254) - Ended ./something.cgi
ich habe auch schon probiert das encoding vom WebClient zu ändern, ich habe Default und UTF8 probiert, beides nützte nichts.
mfG b3nj
Fiddler anschmeissen, schauen was geschickt wird, nachbauen, Fertig.
Das sollte bei HTTP ja an und für sich immer funktionieren. Mit den Logs des CGI-Skripts lässt sich nämlich für uns nicht wirklich was anfangen da wir das Skript nicht kennen.
[EDIT]
Zusätzlich noch: http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
Hallo,
für mich sieht es so aus als ob der Server das <?xml ...> nicht mag.
Was passiert, wenn Du dieses Tag weglässt? Wenn das gepostete Formular abgeschickt wird, wird der Browser ja auch kein <?xml>-Tag einfügen...
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Hallo,
Danke für die Antworten.
@jaensen
Ich werde das RFC gleich mal anschauen und ausprobieren. vielen dank.
@marsstein
ich habe gerade nachgeschaut, aber das xml-tag ist nötig. der tag wird im browser auch angezeigt, den source davon hab ich mit dem chrome geholt, keine ahnung weshalb der mit das tag im source nicht angezeigt hat, in der oberfläche ist es aber eindeutig vorhanden.
mfG toredo