I had a project that required posting a 2.5 million character QueryString to a web page. The server itself only parsed URI's that were 5,400 characters or less. After trying several different sets of code for WebRequest/WebResponse, WebClient, and Sockets, I finally found the following code that solved my problem:
HttpWebRequest webReq;
HttpWebResponse webResp = null;
string Response = "";
Stream reqStream = null;
webReq = (HttpWebRequest)WebRequest.Create(strURL);
Byte[] bytes = Encoding.UTF8.GetBytes("xml_doc=" + HttpUtility.UrlEncode(strQueryString));
webReq.ContentType = "application/x-www-form-urlencoded";
webReq.Method = "POST";
webReq.ContentLength = bytes.Length;
reqStream = webReq.GetRequestStream();
reqStream.Write(bytes, 0, bytes.Length);
reqStream.Close();
webResp = (HttpWebResponse)webReq.GetResponse();
if (webResp.StatusCode == HttpStatusCode.OK)
{
StreamReader loResponseStream = new StreamReader(webResp.GetResponseStream(), Encoding.UTF8);
Response = loResponseStream.ReadToEnd();
}
webResp.Close();
reqStream = null;
webResp = null;
webReq = null;
You don't need to use the sockets manually. You can use the HttpWebRequest object to handle the socket layer. You can see the answers on this other question for some sample code that will post a file. Just change the destination URL to an HTTPS url for it to use SSL.