Joerg I assumed that you hadn't run this code since it contains an error that won't let it compile; i.e., GetByte should be GetBytes in the _expression_ defining the content variable.
Ouch, you're right... I just grabbed the code from one of my earlier posts... I'm sorry. BTW, here's working sample with URL-encoding: public void PostForm(string url, string formData, string encodingName) { MemoryStream content = new MemoryStream(formData.Length * 2); Encoding encoding = Encoding.GetEncoding(encodingName); string[] keyValuePairs = formData.Split('&', '='); int numberOfPairs = keyValuePairs.Length; bool isKey = true; foreach (string keyValue in keyValuePairs) { byte[] bytes = HttpUtility.UrlEncodeToBytes(keyValue, encoding); content.Write(bytes, 0, bytes.Length); if (isKey) { content.WriteByte((byte) '='); } else { content.WriteByte((byte) '&'); } isKey = !isKey; } content.SetLength(content.Length - 1); HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url); request.Method = POST ; request.ContentType = String.Format( application/x-www-form-urlencoded; charset={0} , encodingName);; request.ContentLength = content.Length; using (Stream requestStream = request.GetRequestStream()) { content.WriteTo(requestStream); } HttpWebResponse response = (HttpWebResponse) request.GetResponse(); using (Stream responseStream = response.GetResponseStream()) { byte[] buffer = new byte[response.ContentLength]; responseStream.Read(buffer, 0, buffer.Length); // use buffer... } } Cheers,