Laden...

Spezieller HTTP Post

Erstellt von B3nj vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.289 Views
B3nj Themenstarter:in
242 Beiträge seit 2006
vor 14 Jahren
Spezieller HTTP Post

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

2.760 Beiträge seit 2006
vor 14 Jahren

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

3.170 Beiträge seit 2006
vor 14 Jahren

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

B3nj Themenstarter:in
242 Beiträge seit 2006
vor 14 Jahren

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