Dienstag, 17. September 2013

HTTP GET und POST per C#

GET und POST  sind zwei verschiedene Methoden, um Daten per HTTP an einen Server zu schicken. In diesem Post möchte ich kurz die Unterschiede zwischen Ihnen erläutern und die Umsetzung in C# erläutern.
Bei GET werden die Daten an die URL angehängt, z.B. example.com/?field=id. Eine direkt Konsequenz ist, dass die Länge dieser Daten durch die maximale URL Länge begrenzt ist.
Bei POST wird ein Datenblock ohne Nutzung der URL übertragen.
Als Vorteile von GET sind nun z.B. die Übersichtlichkeit (welche aber auch als Unsicherheit angesehen werden kann) und der geringere Overhead anzuführen, bei POST die unbegrenzte Übertragungsmenge sowie dass ein Fileupload nur mit POST machbar ist.

Beide Methoden können wir nun z.B. mit einem System.Net.WebRequest benutzen. Für die folgenden Beispielcodes müssen jeweils System.Net und System.IO eingebunden sein.
Bei POST und GET legen wir zuerst den Request an, hierbei ist zu beachten, dass die URL bei GET wie oben erwähnt schon alle Daten enthalten muss.
WebRequest MyRequest;
MyRequest = WebRequest.Create(URL);
MyRequest.Method = "POST"; // "GET" für GET
Im Fall von POST müssen die Daten für die Abfrage nun hochgeladen werden, was wie folgt umgesetzt werden kann:
Stream DataStream = MyRequest.GetRequestStream();
Byte[] Data = Encoding.UTF8.GetBytes("exampledata");
DataStream.Write(Data, 0, Data.Length);
DataStream.Close();
In beiden Fällen kann nun eine mögliche Antwort des Servers ausgelesen werden:
            Stream ResponseStream;
            ResponseStream = MyRequest.GetResponse().GetResponseStream();
            StreamReader ResponseReader = new StreamReader(ResponseStream);

            string TempLine = "";
            int i = 0;
            string Result = "";
            while (TempLine != null)
            {
                i++;
                TempLine = ResponseReader.ReadLine();
                if (TempLine != null)
                    Result += TempLine;
            }

Kommentare:

  1. "example.com/field=id" bei get muss natürlich um ein Fragezeichen ergänzt werden ;)

    AntwortenLöschen
    Antworten
    1. Oh ja danke, stimmt. Ich habe da gar nicht so nachgedacht weil die URL ja eh nur ausgedacht und quatsch ist, aber ja bei GET muss ja immer ein ? mit.
      Im Post http://csharp-tricks.blogspot.de/2013/09/daten-von-facebook-auslesen.html wird GET angewandt.

      Löschen