Montag, 9. März 2015

HTTP POST Parameter übergeben

In einem vorigen Post habe ich bereits die grundlegende Verwendung von HTTP POST und GET erklärt. Dies sind Methoden, um mit dem HTTP Protokoll Daten, zum Beispiel an einen Webserver, zu übertragen. In C# gibt es hierfür mehrere Möglichkeiten, im vorigen Post wurde zum Beispiel ein WebRequest benutzt, möglich ist aber auch die Verwendung des WebClient Steuerelements und vieles mehr. Gemeinsam ist jedoch den meisten Methoden, dass wir eine Anfrage (Request) mit der entsprechenden URL erstellen, eventuell Parameter übergeben und eine Antwort (Response) erhalten.

Es gibt 2 Gründe, warum ich quasi das Thema des letzten Posts noch einmal wiederhole und vertiefe: Zum einen habe ich damals nicht genau erklärt, wie man POST Parameter übergibt, was ich hier tun möchte. Zum anderen möchte ich hier die Klasse HttpWebRequest verwenden, da diese die Möglichkeit bietet, Cookies zu verwalten. So können wir zum Beispiel eine PHP Session nutzen, was wir in einem späteren Post brauchen.

Kommen wir zum Code, für welchen System.Net und System.IO mittels using eingebunden sein muss:
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://bloggeroliver.bplaced.net/PHPExamples/Post.php");
            string postData = "username=User&password=Secret";
            byte[] data = Encoding.UTF8.GetBytes(postData);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded; charset=utf-8";
            request.ContentLength = data.Length;

            using (Stream stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }

            WebResponse response = (HttpWebResponse)request.GetResponse();
            string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

Als Beispiel URL habe ich das im vorigen Post erstellte PHP Skript genommen, welches 2 POST Parameter erwartet. Wie man sieht, haben die Daten in der String Repräsentation die Form "Parameter1=Value1&Parameter2=Value2&....ParameterN=ValueN". Dieser String muss jedoch in ein Byte Array konvertiert werden, welches wir mittels Encoding.X.GetBytes() erledigen. Für X setzen wir eine unterstützte Kodierung ein. Ich habe hier UTF8 gewählt. Es ist etwas Vorsicht geboten, welche Kodierungen der Server unterstützt. Aber UTF8 oder ANSII sollten unterstützt werden. Die Kodierung ist dann auch beim ContentType anzugeben.
Anschließend erzeugen wir mit GetRequestStream() einen Stream für die Anfrage aus request und schreiben mit diesem die Byte Daten.
Optional können wir dann noch mittels GetResponse() die Antwort der Anfrage auslesen. In unserem Fall gibt das Skript den übergebenen Benutzernamen und das Passwort zurück.

Keine Kommentare:

Kommentar veröffentlichen