views:

94

answers:

1

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;
+1  A: 

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.

David
I started with this approach originally, but I was receiving a 414 error (URL too long) from the server. I tried using UploadString and DownloadString with WebClient, but this also returned a 414. Given your comment, I searched for additional WebRequest examples and I found one that worked. I'll post the code that I implemented in the original question.
Registered User